【问题标题】:In WPF, is there a way to bind properties without requiring a backing field?在 WPF 中,有没有一种方法可以在不需要支持字段的情况下绑定属性?
【发布时间】:2019-01-15 20:22:45
【问题描述】:

在下面的示例中,支持字段不执行任何类型的计算,而只是返回一个值。有没有办法在不需要支持字段的情况下编写这个?在这种情况下,我并没有真正看到拥有一个的目的。如果我的 XAML 直接绑定到 Age,我真的不知道为什么我还需要 _age。

private int _age;
public int Age
{
    get {return _age; }
    set
    {
        _age = value;
        OnPropertyChanged("Age");
    }
}

private void ButtonClickIncrease(object sender, RoutedEventArgs e)
{
    Age++;
}
private void ButtonClickDecrease(object sender, RoutedEventArgs e)
{
    Age--;
}

【问题讨论】:

  • 你真的应该使用 MVVM 模式。在您的 ViewModel 中,您可以使用 Fody.PropertyChanged 自动实现 INPC
  • @SirRufo 是的。谁不喜欢不可调试、不可测试、不可预测的代码,并使用一些随机的 3rd 方库,将随机操作码随机注入您的代码?更不用说使用一堆慢反射来做到这一点了吗?不过,我会同意 MVVM 的评论 :)。
  • 我正在使用 MVVM 和 INPC。我认为在设置器中显示 OnPropertyChanged 会暗示这一点。我仍然不太明白为什么我需要支持字段。

标签: c# wpf xaml


【解决方案1】:

虽然支持字段不执行任何计算,但它用于存储Age 属性的值。您需要它来返回 getter 中的值并在 setter 中分配新值。如果你没有它,getter 会返回什么?二传手会存储什么?

也许您习惯了自动属性,而您似乎不使用支持字段。当您的 getter 和 setter 只返回和分配属性时,自动属性是一种简写。但是,因为您正在执行其他操作(即OnPropertyChanged("Age")),所以您不能使用自动属性,因此必须使用支持字段手动编码 getter 和 setter。见Auto-Implemented Properties

【讨论】:

  • 感谢您的解释。你说得对,我习惯于使用自动属性,所以我假设 Age 的值只是存储在 Age 本身中。但现在它是有道理的。谢谢!
  • 你可以只拥有一个自动属性。但是,您需要在设置时更改属性。假设您需要查看 ui 中的值变化。并不总是需要看到 ui 立即响应属性更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
  • 2016-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多