我正在研究WPF项目。我创建了一个包含组合框的usercontrol;表示布尔值(True或false)。我为我的usercontrol注册了DependencyProperty
Value
。
每当更改组合框选择时,我将更新Value
属性,并且当Value
属性更新时,我将更新组合框。
但是当我在MVVM中使用我的usercontrol时,我发现了这个问题。我将Value
属性与我的viewModel中的IsEnable
属性绑定。我将绑定模式设置为TwoWay
绑定。但是当我在comboBox中更改选择时,永远不会设置IsEnable
属性。
我的用户控件:
public bool Value
{
get { return (bool)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(bool),
typeof(BooleanComboBox),
new UIPropertyMetadata(true, OnValuePropertyChanged));
private void Cmb_Selection_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox cmb = sender as ComboBox;
object selectedValue = cmb.SelectedValue;
if (selectedValue == null)
{
this.Value = false;
}
else
{
if (selectedValue.GetType() == typeof(bool))
{
this.Value = (bool)selectedValue;
}
else
{
this.Value = false;
}
}
if (this.OnValueChange != null)
this.OnValueChange(this, this.Value);
}
private static void OnValuePropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
{
BooleanComboBox self = sender as BooleanComboBox;
self.Cmb_Selection.SelectedValue = (bool)args.NewValue;
}
在窗口中,我放置了我的usercontrol(我已经将usercontrol的datacontext设置为我的viewModel):
<tibsExtControl:BooleanComboBox Grid.Row="4"
Grid.Column="1"
VerticalAlignment="Center"
Value="{Binding Path=NewTemporaryZone.IsEnable,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"
x:Name="Cmb_AllowNonLBILogon"/>
在我的模型类中,我声明了一个IsEnable
属性:
private bool _isEnable;
public bool IsEnable
{
get { return _isEnable; }
set
{
_isEnable= value;
OnPropertyChanged("IsEnable");
}
}
我的usercontrol发生了什么。我想念什么?请帮我。 T.T
答案 0 :(得分:0)
请检查VS的输出窗口中是否有任何绑定错误。
答案 1 :(得分:0)
尝试在Cmb_Selection_SelectionChanged
中刷新您的绑定。类似的东西:
BindingExpression b = cmb.GetBindingExpression(MyNamespace.ValueProperty);
b.UpdateSource();
答案 2 :(得分:0)
我遇到了同样的问题;具有布尔依赖属性!尝试将bool
切换为INullable<bool>
(bool?
)并应用相应的类型转换。这对我有用。在创建依赖项属性时,不知道这是一个错误还是与引用类型相比处理的值类型有些不同?也许其他人可以验证。