У меня есть UserControl
, у которого есть CheckBox
. Когда я использую UserControl
на моей главной странице XAML, я бы хотел, чтобы TwoWay привязывал свойство элемента управления к свойству на моем ViewModel, например.Как связать TwoWay между CheckBox в UserControl и ViewModel в более широкой области?
<myUserControl BtnIsBlacklisted="{Binding IsBlacklisted, Mode=TwoWay}" />
Когда IsBlacklisted
изменения, я хочу, чтобы мой флажок, чтобы изменить слишком, и наоборот.
Вот что у меня есть,
public static readonly DependencyProperty BtnIsBlacklistedProperty =
DependencyProperty.Register("BtnIsBlacklisted",
typeof(bool),
typeof(MyUserControl),
new PropertyMetadata(false, new
PropertyChangedCallback(BtnIsBlacklistedPropertyChanged))
);
private static void BtnIsBlacklistedPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
// ... do something here ...
}
public bool BtnIsBlacklisted
{
get { return (bool)GetValue(BtnIsBlacklistedProperty); }
set { SetValue(BtnIsBlacklistedProperty, value); }
}
Мой UserControl имеет это для CheckBox,
<CheckBox x:Name="myCheckBox"
...
IsChecked="{Binding Path=BtnIsBlacklisted,
ElementName=UserControl,
Converter={StaticResource BoolToNotBool},
Mode=TwoWay}" />
Свойство на моем объекте ViewModel выглядит следующим образом,
public bool IsBlacklisted
{
get
{
return App.VM.BlacklistedRetailers.Contains(this.Retailer);
}
set
{
if (value)
{
App.VM.BlacklistedRetailers.Add(this.Retailer);
}
else
{
while (App.VM.BlacklistedRetailers.Contains(this.Retailer))
{
App.VM.BlacklistedRetailers.Remove(this.Retailer);
}
}
this.NotifyPropertyChanged("IsBlacklisted");
}
}
только способ BlacklistedRetailers
изменяется через установленный метод выше, поэтому нет необходимости запускать NotifyPropertyChanged
оттуда ...
Я пробовал много предложений других вопросов, то есть
- используя свойство зависимостей
- включая
Mode=TwoWay
- Binding на
UserControl
используя автореферентное DataContext набор на содержащей сетке (это тоже не работает).
однако ни один из этих продуктов не работал.
Некоторые заключительные замечания:
- Это для 7.5 проекта Windows Phone
- Edit: Одним из способов связывания лань не работает, либо, кажется, что существует проблема привязки к
UserControl
-х собственные свойства
Является ли ваш конвертер 'BoolToNotBool' TwoWay? –
Это так. Я работал над этим немного больше, и я обнаружил, что он работает, если я связываюсь непосредственно с UserControl XAML, а не привязываюсь через. свойства UserControl, например. 'IsChecked =" {Binding IsBlacklisted, Converter = {StaticResource BoolToNotBool}, Mode = TwoWay} ", однако это не очень общее, поскольку для этого требуется знание имени внешнего ViewModel в' UserControl' ... Я также узнал, что Связывание OneWay не работает нормально, свойства обновлялись только потому, что я устанавливал их в обработчике событий DependencyPropertyChanged - вопрос обновлялся ... – Brendan