【问题标题】:How to bind two properties in a class wpf如何在一个类wpf中绑定两个属性
【发布时间】:2018-11-13 13:14:12
【问题描述】:

我想在视图模型中绑定两个属性。

public class MainViewModel : INotifyPropertyChanged
{
   public string Format 
   {
     get { return format; }
     set
     {
        if (format != value)
        {
           format = value;
           OnPropertyChanged("Format");   
        }
     }
   }

   public string FilterString
   {
     get { return filter; }
     set { filter = SomeFunction(value); }
   }

   public event PropertyChangedEventHandler PropertyChanged;

   private void OnPropertyChanged(string propName)
   {
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
   }

}

所以当 Format 属性发生变化时,它会调用 FilterString 的 set 方法。

这样做的正确方法是什么。

【问题讨论】:

  • 在Format属性的setter中设置FilterString属性?
  • 我不明白这个问题 - 从Format 的设置者你可以打电话给FilterString = whatyouwant。只是不要忘记OnPropertyChanged("FilterString")
  • 好的,我明白了,但这是在类中绑定属性的正确方法吗?或者应该使用事件或其他设计模式。
  • FilterString 似乎应该是一个只读属性,它返回 SomeFunction 的值。 SomeFunction 是否使用了 Format 属性的值,或者这两个属性有什么关系?
  • 属性必须执行什么样的逻辑(必须在其设置器中实现)与属性绑定无关。我可能是错的,但也许你的问题意味着它是否是在属性设置器中做更多事情的好方法,这可能会延迟处理(= UI)。然后您可以异步执行操作...

标签: c# wpf mvvm binding viewmodel


【解决方案1】:

您可以使用 WPF multibinding 将控件绑定到两个字段,但在这种情况下,我认为 ViewModel 会在 Format 更改时更改 FilterString 更有意义。

当控件的值取决于两件事时,您将使用multibinding,因为这是一个 GUI 功能。在您的情况下,ViewModel 属性是逻辑链接的,因此将代码放在 ViewModel 中更有意义。

为了帮助您决定使用哪种模式,请问问自己,如果您在其他地方重用 ViewModel,您是否想要相同的行为。

【讨论】:

    猜你喜欢
    • 2014-06-07
    • 2011-12-03
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    相关资源
    最近更新 更多