WPF DependencyProperty和数据绑定

时间:2010-08-22 18:35:07

标签: c# wpf xaml data-binding

我正在研究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

3 个答案:

答案 0 :(得分:0)

请检查VS的输出窗口中是否有任何绑定错误。

答案 1 :(得分:0)

尝试在Cmb_Selection_SelectionChanged中刷新您的绑定。类似的东西:

BindingExpression b = cmb.GetBindingExpression(MyNamespace.ValueProperty);
b.UpdateSource();

答案 2 :(得分:0)

我遇到了同样的问题;具有布尔依赖属性!尝试将bool切换为INullable<bool>bool?)并应用相应的类型转换。这对我有用。在创建依赖项属性时,不知道这是一个错误还是与引用类型相比处理的值类型有些不同?也许其他人可以验证。