Wpf Combobox ItemsSource Binding(MVVM)-如何重置ItemsList

Wpf Combobox ItemsSource Binding(MVVM)-如何重置ItemsList,wpf,data-binding,combobox,itemssource,Wpf,Data Binding,Combobox,Itemssource,我有一个组合框,其中ItemsSource绑定到ObservableCollection。 单选按钮允许用户选择一种模式。对于每种模式,组合框中应提供专用的不同列表 我使用Observablecollection的问题是,一旦公共Observablecollection被初始化,只有通过清除所有并逐项添加新列表才能对其进行修改 这是非常高效的,并且会导致我对所选项目的验证出现问题 您能否建议另一种方法,允许我重置项目源,以便在UI中刷新它而无需删除/添加?一种非常基本的方法: class VM

我有一个组合框,其中ItemsSource绑定到ObservableCollection。 单选按钮允许用户选择一种模式。对于每种模式,组合框中应提供专用的不同列表

我使用Observablecollection的问题是,一旦公共Observablecollection被初始化,只有通过清除所有并逐项添加新列表才能对其进行修改

这是非常高效的,并且会导致我对所选项目的验证出现问题

您能否建议另一种方法,允许我重置项目源,以便在UI中刷新它而无需删除/添加?

一种非常基本的方法:

class VM
{
  private ObservableCollection mode1;
  private ObservableCollection mode2;

    //view binds to this
  public ObservableCollection<T> X { get; private set; }

    //changing radiobutton invokes this
  public void ChangeMode( mode )
  {
    if( mode == 1 )
      X = mode1;
    else if( mode == 2 )
      X = mode2;
    else
      X = null;
  }
}
类虚拟机
{
专用可观察采集模式1;
私有可观测采集模式2;
//视图与此绑定
公共可观测集合X{get;私有集;}
//更改radiobutton将调用此
公共无效更改模式(模式)
{
如果(模式==1)
X=模式1;
否则如果(模式==2)
X=模式2;
其他的
X=零;
}
}
还没有测试过,但应该可以工作;如果在更改模式后UI中没有更新,则应在更改模式返回之前为X调用
RaisePropertyChanged(…)

此外,如果您不向列表中添加/删除,则实际上不需要可观的收集,相反,您可以使用
列表

只需注意:如果您使用
列表
绑定
上的
模式
需要从
单向
更改为
双向
。谢谢。不。。。它不起作用。只有X的初始化有效。这是真的,我不需要一个可观察的集合,并已替换为简单列表,并在分配后提高属性更改。也将测试双向建议它确实适用于双向!!!太好了
知道为什么如果我按下下拉按钮,如果我没有等待足够的时间重新填充列表,它就会卡住吗?通常只有一个UI线程,因此如果它正在bisu更新列表项,它就不能同时重新绘制其他控件