【问题标题】:WPF only Binding to auto-implemented Property仅 WPF 绑定到自动实现的属性
【发布时间】:2019-06-15 07:58:58
【问题描述】:

我有一个绑定到属性的标签,该绑定仅在视图模型中的属性自动实现时才有效。

在 XAML 中:

<Label Content="{Binding MyProperty}" />

在 ViewModel 中:

public virtual string MyProperty { get; set; }
//This code above works fine, but when i use it as below,binding doesn't work

private string _myProperty;
public virtual string MyProperty
{
    get { return _myProperty; }
    set { _myProperty = value; }
}

【问题讨论】:

  • “不工作”是指它正在正确加载初始值,但在属性更新时标签没有改变?
  • 两者都是一样的。如果您的意思是更改属性触发了自动属性的 UI 更新,而不是显式实现,那么这是巧合,或者您还更改了代码的其他部分。如果要触发 UI 更新,则需要实现 INotifyPropertyChanged 接口并在 setter 中通知 UI。详情见
  • 我正在将 mvvm 与 pocoview 模型一起使用,当使用第一种方法时,当用户更改 OnMyPropertyChahged(​​) 的标签时,调试器正在进入;使用第二种方法它不起作用
  • 这似乎是 DevExpress POCOViewModels(你应该提到你正在使用的)的一个特殊功能,因为它们通过在你背后创建一个子类来重写公共虚拟自动实现的属性,并用覆盖这些属性正确的通知代码。见DevExpress’ documentation on POCOViewModels
  • 如果我的目的是更改设置器,解决方案是什么?

标签: c# wpf xaml data-binding


【解决方案1】:

您可能正在使用编译时代码生成实用程序来为您处理INotifyPropertyChanged.PropertyChanged,例如Fody 或DevExpress。此类工具将处理自动实现的属性,但您需要在更改属性值后通过显式引发事件来处理完全实现的属性。

private string _myProperty;
public virtual string MyProperty
{
    get { return _myProperty; }
    set
    {
        _myProperty = value;
        OnPropertyChanged(nameof(MyProperty)); // or however your base view-model class method signature for raising the event
    }
}

【讨论】:

    猜你喜欢
    • 2021-07-29
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 2018-04-09
    • 1970-01-01
    相关资源
    最近更新 更多