Strange BindingMode = TwoWay行为

时间:2011-09-01 07:35:07

标签: .net wpf data-binding dependency-properties selecteditem

拥有此代码

public int SelectedPage
    {
        get { return (int)GetValue(SelectedPageeProperty); }
        set
        {
            SetValue(SelectedPageeProperty, value);
            if (NavigationCommands.Refresh.CanExecute(null, this))
                NavigationCommands.Refresh.Execute(null, this);
        }
    }

    // Using a DependencyProperty as the backing store for SelectedPage.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty SelectedPageeProperty =
        DependencyProperty.Register("SelectedPagee", typeof(int), typeof(DataBaseSettings), new UIPropertyMetadata(0));

wpf:

 <ComboBox  SelectedItem="{Binding Path=SelectedPage, Mode=TwoWay}" />

关于这一点的奇怪之处在于,如果将静态依赖项属性命名为公共属性SelectedPage,则绑定不起作用。但是,如果我轻轻地将dp重命名为SelectedPagee,其中包含2个ee,则可以正常工作。有没有人能够解释这种现象?

1 个答案:

答案 0 :(得分:5)

如果你像这样重命名属性,绑定将找不到它并使用CLR属性的setter,否则将被完全忽略(这就是为什么你不应该有像你这样的任何代码),你的包装中有一些刷新逻辑(如上所述,不应该存在)可能会刷新与绑定有关的东西,让你认为它“有效”。

如果您需要对属性更改执行其他逻辑,请在该字段的元数据注册中添加DependencyPropertyChanged回调。

... new UIPropertyMetadata(0, SelectedPageChanged);

private static void SelectedPageChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    var @this = (DataBaseSettings)sender;
    if (NavigationCommands.Refresh.CanExecute(null, @this))
        NavigationCommands.Refresh.Execute(null, @this);
}