rap*_*011 1 .net data-binding wpf 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));
Run Code Online (Sandbox Code Playgroud)
wpf:
<ComboBox SelectedItem="{Binding Path=SelectedPage, Mode=TwoWay}" />
Run Code Online (Sandbox Code Playgroud)
关于这一点的奇怪之处在于,如果静态依赖项属性被命名为公共属性SelectedPage,则绑定不起作用.但是,如果我轻轻地将dp重命名为SelectedPagee,其中包含2个ee,则可以正常工作.有没有人能够解释这种现象?
如果你像这样重命名属性,绑定将找不到它并使用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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |