【问题标题】:Correctly Updating ComboBox Selected Item in MVVM正确更新 MVVM 中的 ComboBox 选定项
【发布时间】:2020-01-20 07:38:42
【问题描述】:

鉴于以下 ViewModel 代码 - cmbxFields 绑定到 ComboBox ItemSource,SelectedcmbxField 绑定到所选项目 - ComboBox 所选项目不会更新,直到我导航离开并返回视图 (Page )。在 MVVM 中执行此操作以立即更新 ComboBox 的正确方法是什么?

public ObservableCollection<string> cmbxFields { get; set; } = new ObservableCollection<string>();
public string SelectedCmbxField { get; set; }

private async Task LoadWorkspaceFields()
{
    cmbxFields.Clear();
    foreach (var curField in availableFields.OrderBy(x =>x.Name).Select(x => x.Name))
    {
        cmbxFields.Add(curField);
    }

    SelectedCmbxField = cmbxFields.FirstOrDefault(x => x.StartsWith("Some Text"));
}

我在 ComboBox XAML 上尝试了以下操作-

SelectedItem="{Binding SelectedcmbxField, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"

【问题讨论】:

  • 包含该属性的类应该实现INotifyPropertyChanged
  • 你应该找到你的解决方案here
  • @Stefan 应该,是的,但是你也可以在特定的属性设置器中直接引用OnChanged

标签: c# mvvm


【解决方案1】:

INotifyPropertyChanged 实现的简单示例:

public class MyClass : INotifyPropertyChanged
{
  private int intValue;

  public event PropertyChangedEventHandler PropertyChanged;

  public int MyIntValue
  {
    get => intValue;
    set
    {
      intValue = value;
       PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(MyIntValue)));
    }
  }
}

【讨论】:

  • 这对我有用,谢谢。仅供参考,请注意您需要分配给 Public 属性,而不是分配给私有变量才能触发更新。
猜你喜欢
  • 2012-06-18
  • 1970-01-01
  • 2015-01-12
  • 2018-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
相关资源
最近更新 更多