我有一个 WPF 应用程序,我在那里使用 MVVM。
我有一个 ViewModel,我在其中拥有 2 个 ObservableCollection 私有(private)成员(Test 是我创建的一个类)。
我的 MainWindow 有一个 TabControl,每个选项卡都连接到另一个 ObservableCollection。
MVVM 在第一次加载时工作(如果 ObservableCollection 项的 isChecked 为真 - 选中复选框,如果不是 - 未选中复选框)。
我为 SelectAll 或 UnselectAll 添加了一个复选框。
单击它时 - 我转到特定的 ObservableCollection 并将所有 IsChecked 成员相应地更改为 SelectAll 复选框。
问题是我在 GUI 中看不到它(第一个负载保持在那里,并且只要我手动单击每个复选框就会改变)
我应该以某种方式“刷新”GUI吗?
谢谢。
ViewModel.cs
private ObservableCollection<Test> _basicTests;
private ObservableCollection<Test> _advancedTests;
public ObservableCollection<Test> BasicTests
{
get { return _basicTests; ; }
set
{
_basicTests = value;
OnPropertyChanged("BasicTests");
}
}
public ObservableCollection<Test> AdvancedTests
{
get { return _advancedTests; ; }
set
{
_advancedTests = value;
OnPropertyChanged("AdvancedTests");
}
}
private void OnPropertyChanged(string propertyname)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyname));
}
}
}
MainWindow.xaml:
<TabControl x:Name="tabControl" Margin="0,135,0,0" TabStripPlacement="Left">
<TabItem Header="Basic">
<ListView x:Name="basicTestsList" ItemsSource="{Binding BasicTests}" Background="#FFE5E5E5">
<ListView.ItemTemplate>
<DataTemplate>
<CheckBox x:Name="cbListOfBasicTests"
IsChecked="{Binding IsChecked}"
Content="{Binding Name}"
Margin="0,5,0,0"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</TabItem>
<TabItem Header="Advanced">
<ListView x:Name="advancedTestsList" ItemsSource="{Binding AdvancedTests}" Background="#FFE5E5E5">
<ListView.ItemTemplate>
<DataTemplate>
<CheckBox x:Name="cbListOfAdvancedTests"
IsChecked="{Binding IsChecked}"
Content="{Binding Name}"
Margin="0,5,0,0"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</TabItem>
</TabControl>
测试.cs:
class Test
{
public string Name { get; set; }
public bool IsChecked { get; set; }
}
最佳答案
ObservableCollection 只会在您添加或删除项目时引发 OnPropertyChanged 事件。如果您希望 UI 在更改 IsChecked 属性时更新,则 Class Test 需要在 IsChecked 更改时引发 OnPropertyChanged 事件:
class Test
{
private bool isChecked;
public bool IsChecked
{
get { return this.isChecked; }
set
{
this.isChecked= value;
this.OnPropertyChanged("IsChecked");
}
}
}
关于c# - WPF:使用 MVVM 的 SelectAll\UnSelectAll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55220220/