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
可以找到各种技术的良好概述,我更喜欢在一个方法调用中设置值并触发事件