MVVM 更新组合框项目源和刷新
MVVM update combobox itemsSource and refresh
我正在处理一个 WPF 项目及其 MVVM。我遇到了有关刷新组合框绑定值的问题。所以,在这种情况下,我的网格上有一个组合框和按钮。我需要更改数据源然后刷新以根据之前选择的一步查看新值。
请告诉我点赞下一个按钮的最佳方法是什么?在那之后可能需要喜欢上一个按钮。
public MyScriptForm(IMyScriptModel viewModel) {
this.Model=viewModel;
InitializeComponent();
Height=Double.NaN;
Width=Double.NaN;
}
public IMyScriptModel Model {
get {
return this.DataContext as IMyScriptModel;
}
set {
this.DataContext=value;
}
}
private void btnNext_Click(object sender,
RoutedEventArgs e) {
/// to what ?
Model.cbxAnswer.Clear();
Model.cbxAnswer.add("Step2Data");
}
Create{//its a huge project, this working on when this form created
myScript.Model.cbxAnswer.Add("1");
myScript.Model.cbxAnswer.Add("2");
myScript.Model.cbxAnswer.Add("3");
}
destroy{}
////////////////////////
//Onmy model
public List<string> cbxAnswer {
get {
return m_cbxAnswer;
}
set {
m_cbxAnswer=value;
OnPropertyChanged("cbxAnswer");
}
}
public List<string> m_cbxAnswer=new List<string>();
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName) {
if (PropertyChanged !=null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
XAML:
<Grid>
<ComboBox Name="cbxAnswer" HorizontalAlignment="Left" Margin="10,130,0,0" VerticalAlignment="Top" Width="130" Height="25" ItemsSource="{Binding Path=cbxAnswer}" />
<Button Name="btnNext" HorizontalAlignment="Left" Margin="215,130,0,0" VerticalAlignment="Top" Width="75" Content="İlerle" Click="btnNext_Click" />
</Grid>
您只是在集合中添加和删除(而不是创建新集合)。这意味着您需要一个实现 INotifyCollectionChanged
.
的集合
一个非常方便的 class 已经做到了这一点 ObservableCollection<T>
,我将在此处使用它来代替 List<T>
,以及您需要集合更改以传播到 [=] 的任何其他地方23=].
如果您确实要进行完全 刷新,您可以考虑只重新创建集合而不是add/removes。这可能会给您带来净性能提升,因为每个操作都必须由 UI 单独处理,而不是一次全部处理。
我正在处理一个 WPF 项目及其 MVVM。我遇到了有关刷新组合框绑定值的问题。所以,在这种情况下,我的网格上有一个组合框和按钮。我需要更改数据源然后刷新以根据之前选择的一步查看新值。
请告诉我点赞下一个按钮的最佳方法是什么?在那之后可能需要喜欢上一个按钮。
public MyScriptForm(IMyScriptModel viewModel) {
this.Model=viewModel;
InitializeComponent();
Height=Double.NaN;
Width=Double.NaN;
}
public IMyScriptModel Model {
get {
return this.DataContext as IMyScriptModel;
}
set {
this.DataContext=value;
}
}
private void btnNext_Click(object sender,
RoutedEventArgs e) {
/// to what ?
Model.cbxAnswer.Clear();
Model.cbxAnswer.add("Step2Data");
}
Create{//its a huge project, this working on when this form created
myScript.Model.cbxAnswer.Add("1");
myScript.Model.cbxAnswer.Add("2");
myScript.Model.cbxAnswer.Add("3");
}
destroy{}
////////////////////////
//Onmy model
public List<string> cbxAnswer {
get {
return m_cbxAnswer;
}
set {
m_cbxAnswer=value;
OnPropertyChanged("cbxAnswer");
}
}
public List<string> m_cbxAnswer=new List<string>();
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName) {
if (PropertyChanged !=null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
XAML:
<Grid>
<ComboBox Name="cbxAnswer" HorizontalAlignment="Left" Margin="10,130,0,0" VerticalAlignment="Top" Width="130" Height="25" ItemsSource="{Binding Path=cbxAnswer}" />
<Button Name="btnNext" HorizontalAlignment="Left" Margin="215,130,0,0" VerticalAlignment="Top" Width="75" Content="İlerle" Click="btnNext_Click" />
</Grid>
您只是在集合中添加和删除(而不是创建新集合)。这意味着您需要一个实现 INotifyCollectionChanged
.
一个非常方便的 class 已经做到了这一点 ObservableCollection<T>
,我将在此处使用它来代替 List<T>
,以及您需要集合更改以传播到 [=] 的任何其他地方23=].
如果您确实要进行完全 刷新,您可以考虑只重新创建集合而不是add/removes。这可能会给您带来净性能提升,因为每个操作都必须由 UI 单独处理,而不是一次全部处理。