C# Wpf ItemsControl元素不';t更改ObservableCollection值的可见性更改MVVM
我遇到的问题是,当我更改C# Wpf ItemsControl元素不';t更改ObservableCollection值的可见性更改MVVM,c#,wpf,mvvm,C#,Wpf,Mvvm,我遇到的问题是,当我更改observedcollectionbool值IsFoo时,我的文本框既不隐藏也不可见。我不明白为什么会这样。我错过什么了吗? 模型用于可观察采集` public class FooModel: Model { public int Id { get; set; } public string Name { get; set; } public bool IsFoo { get; set; } pub
observedcollection
bool值IsFoo
时,我的文本框既不隐藏也不可见。我不明白为什么会这样。我错过什么了吗?
模型用于可观察采集`
public class FooModel: Model
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsFoo { get; set; }
public string FooStr{ get; set; }
}
模型在视图模型
和视图
public class SomeModel: Model
{
public Model()
{
FooModels= new ObservableCollection<FooModel>();
}
private ObservableCollection<FooModel> _fooModels;
public ObservableCollection<FooModel> FooModels
{
get => _fooModels;
set => SetProperty(ref _fooModels, value);
}
}
公共类SomeModel:Model
{
公共模型()
{
FooModels=新的ObservableCollection();
}
私有可观察收集模型;
公共可观测收集模型
{
获取=>\u模型;
set=>SetProperty(ref\u fooModels,value);
}
}
查看
<ItemsControl FontWeight="Normal" ItemsSource="{Binding Model.FooModels}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type models:FooModel}">
<DockPanel HorizontalAlignment="Left">
<CheckBox
HorizontalAlignment="Right"
Content="{Binding Name}"
DockPanel.Dock="Left"
IsChecked="{Binding IsFoo}" />
<TextBox
DockPanel.Dock="Right"
Style="{StaticResource SimpleTextBox}"
Text="{Binding FooStr}"
Visibility="{Binding IsFoo, Converter={StaticResource BooleanToVisibilityHideConverter}}" />
</DockPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
当数据绑定源属性设置为新值时,您应该实现并向UI发出更改通知:
public class FooModel : Model, INotifyPropertyChanged
{
public int Id { get; set; }
public string Name { get; set; }
private bool _isFoo;
public bool IsFoo
{
get { return _isFoo; }
set { _isFoo = value; OnPropertyChanged(); }
}
public string FooStr { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] String propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
根据您的代码,FooModel.IsFoo
不会触发PropertyChanged
事件。顺便说一句,Model
类是错误的:它不能从自身派生。@dymanoid如果模型在这里发布的代码刚刚命名错误,已经更正。如果您的意思是我需要UpdateSourceTrigger=PropertyChanged
第一次尝试更改了属性,但仍然无效,那么dymanoid的意思是您的属性不会触发更改的事件。“UpdateSourceTrigger”与that@Sentry我明白了,但是为什么房产不着火呢?我从我的另一个示例中编写了这段代码,它的工作原理完全不同,只是该示例没有使用ObservableCollection
可以找到各种技术的良好概述,我更喜欢在一个方法调用中设置值并触发事件