2012-05-06 5 views
2

Я создал простой рейтинг пользовательский элемент управления, проблема этот контроль не будет в WinRT работе, когда я обвязку, он прекрасно работает на Windows Phone, это мой контроль:Связывание с UserControl в WinRT

public sealed partial class RatingControl : UserControl 
{ 
    public int Rate { get { return (int)GetValue(RateProperty); } set { SetValue(RateProperty, value); } } 
    public static readonly DependencyProperty RateProperty = DependencyProperty.Register("Rate", 
                    typeof(int), 
                    typeof(RatingControl), null); 
    public RatingControl() 
    { 
     this.InitializeComponent(); 
     this.Loaded += RatingControl_Loaded; 
    } 

    void RatingControl_Loaded(object sender, RoutedEventArgs e) 
    { 
     List<Image> Images = new List<Image>(); 
     for (int i = 0; i < 5; i++) 
     { 
      Image img = new Image { Width = 35, Height = 35, Margin = new Thickness(3) }; 
      img.Source = new BitmapImage { UriSource = new System.Uri("ms-appx:Images/Stars/notFilled.png") }; 
      Images.Add(img); 
      sp.Children.Add(img); 
     } 
     for (int i = 0; i < Rate; i++) 
      Images[i].Source = new BitmapImage { UriSource = new System.Uri("ms-appx:Images/Stars/Filled.png") }; 
    } 
} 

когда я жёстко значение, он отлично работает:

<local:RatingControl Rate="3" /> 

, но когда я использую Binding, он просто показывает ноль звезд. Я проверил значение Rate, оно всегда равно нулю.

<local:RatingControl Rate="{Binding Decor, Mode=TwoWay}" /> 

UPDATE: Я только что узнал, что связывание происходит, прежде чем я получаю значение скорости, поэтому его нулевой все время. Как я могу это исправить? Мне нужно, чтобы привязка выполнялась после того, как я получил значение. Также я думал, что привязка происходит каждый раз, когда я изменяю значение Rate.

РЕШЕНИЕ: Я не реализовать право DependencyObject, я должен был сделать это:

public static readonly DependencyProperty RateProperty = DependencyProperty.Register("Rate", 
                    typeof(int), 
                    typeof(RatingControl), new PropertyMetadata(0, new PropertyChangedCallback(BindRateControl))); 
+0

Каков ваш DataContext? Я думаю, что это может быть вызвано ошибкой привязки. Вы можете часто отслеживать их в окне Output/Debug (Ctrl + W, O). Возможно, тип Декор не является int. –

+0

Я проверил, он дает числа. и тот же код отлично работает на wp7. – Ateik

+0

Можете ли вы поделиться тестовым проектом? Связывание должно происходить в вызове InitializeComponent или, может быть, вскоре после этого. Событие Loaded, вероятно, произойдет позже. Где вы изменяете значение Rate в своем контроле? –

ответ

2

РЕШЕНИЕ: Я не реализовать право DependencyObject, я должен был сделать это (добавить метод обратного вызова):

public static readonly DependencyProperty RateProperty = DependencyProperty.Register("Rate", 
                   typeof(int), 
                   typeof(RatingControl), 
                   new PropertyMetadata(0, new PropertyChangedCallback(BindRateControl))); 
0

есть вы попробуйте добавить UserControl с фоновым кодом. это поможет вам обеспечить запуск UserControl после получения значения.

Смежные вопросы