WPF绑定顺序如何确保一个属性在另一个属性之前绑定

lah*_*rah 12 c# wpf binding

<Controls:MyControl Mode="Mode1" Value="{Binding Path=Something}" />
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当我在ListView的数据模板中使用此控件时,在设置Mode属性之前发生绑定.

如何确保在值绑定之前始终设置模式?

Sve*_*enG 3

您可以做的是延迟绑定,这样您就可以(几乎)确定模式值已设置到那时。.net 4.5 中有一个延迟绑定属性。这是一篇关于如何在 .Net 4.0 中模拟 .Net 4.0 中的 .Net 4.5 绑定的延迟属性的文章

我个人会在 viewModel (MVVM) 中实现它,这种问题很容易解决。创建两个属性 Mode 和 Something。当模式更改时,它应该触发“Something”属性也发生更改(通过 INotifyPropertyChanged 接口)。

class MyViewModel : INotifyPropertyChanged
  {
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
      if (PropertyChanged != null)
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    private string _mode;

    public string Mode
    {
      get { return _mode; }
      set
      {
        _mode = value;
        OnPropertyChanged("Mode");

        // OnPropertyChanged("Something");
        // or build up via a method:
        // Something = DetermineFromMode(Mode);
      }
    }

    private string _something;

    public string Something
    {
      get { return _something;  }
      set
      {
        _something = value;
        OnPropertyChanged("Something");
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)