我有一个上面UserControl
有一个CheckBox
。当我UserControl
在我的主 XAML 页面上使用时,我想将控件上的属性绑定到我的 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 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
是通过上面的 set 方法,因此无需NotifyPropertyChanged
从那里触发...
我已经尝试了其他问题中的许多建议,即
- 使用依赖属性
- 包含
Mode=TwoWay
- 使用包含网格上设置的自引用 DataContext 进行绑定
UserControl
(这也不起作用)。
但是这些都没有奏效。
一些最后的笔记:
- 这是一个 Windows Phone 7.5 项目
- 编辑:一种方式绑定也不起作用,似乎绑定到
UserControl
自己的属性有问题