拥有此代码
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,则可以正常工作。有没有人能够解释这种现象?
答案 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);
}