C# WPF DependencyProperty和数据绑定
我在WPF项目上工作。我创建了一个包含组合框的usercontrol;表示布尔值True或false的。我为usercontrol注册了DependencyProperty值 每当更改组合框选择时,我将更新Value属性,并且当Value属性为update时,我将更新组合框 但是,当我在MVVM中使用usercontrol时,我发现了这个问题。我在viewModel中将Value属性与IsEnable属性绑定。我将绑定模式设置为双向绑定。但当我更改comboBox中的选择时,IsEnable属性从未设置 我的用户控件:C# WPF DependencyProperty和数据绑定,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,我在WPF项目上工作。我创建了一个包含组合框的usercontrol;表示布尔值True或false的。我为usercontrol注册了DependencyProperty值 每当更改组合框选择时,我将更新Value属性,并且当Value属性为update时,我将更新组合框 但是,当我在MVVM中使用usercontrol时,我发现了这个问题。我在viewModel中将Value属性与IsEnable属性绑定。我将绑定模式设置为双向绑定。但当我更改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"/>
我的用户控制怎么了。我错过了什么?请帮帮我。T.T请检查VS的输出窗口中是否存在任何绑定错误。尝试在Cmb\u Selection\u Selection changed中刷新您的绑定。比如:
BindingExpression b = cmb.GetBindingExpression(MyNamespace.ValueProperty);
b.UpdateSource();
我也有同样的问题;具有布尔依赖属性!尝试将布尔值切换为不可使用布尔值?并应用适当的类型转换。这对我有用。不知道这是否是一个bug,或者在创建依赖属性时,值类型的处理方式是否与引用类型有所不同?也许其他人可以证实这一点
BindingExpression b = cmb.GetBindingExpression(MyNamespace.ValueProperty);
b.UpdateSource();