Я создал простой пользовательский элемент управления Rating, проблема в том, что этот элемент управления не будет работать в WinRT, когда я использую привязку, он отлично работает на Windows Phone. Это мой элемент управления:
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}" />
ОБНОВЛЕНИЕ: я только что узнал, что привязка происходит до того, как я получу значение скорости, поэтому она все время равна нулю. Как я могу это исправить? Мне нужно, чтобы привязка произошла после того, как я получу значение. Также я думал, что Binding происходит каждый раз, когда я меняю значение Rate.
РЕШЕНИЕ: я не реализовал правильно DependencyObject, я должен был сделать это:
public static readonly DependencyProperty RateProperty = DependencyProperty.Register("Rate",
typeof(int),
typeof(RatingControl), new PropertyMetadata(0, new PropertyChangedCallback(BindRateControl)));