Элемент Wpf ItemsControl не меняет видимость при изменении значения ObservableCollection MVVM - PullRequest
0 голосов
/ 26 сентября 2018

Проблема, с которой я сталкиваюсь, заключается в том, что мои TextBox не скрываются и не становятся видимыми, когда я меняю ObservableCollection значение bool IsFoo.Я не могу понять, почему это происходит.Я что-то упустил?

Модель используется для ObservableCollection`

public class FooModel: Model
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public bool IsFoo { get; set; }
        public string FooStr{ get; set; }
    }

Модель используется между ViewModel и View

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);
      } 
    }

Просмотр

<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>

1 Ответ

0 голосов
/ 26 сентября 2018

Вы должны реализовать INotifyPropertyChanged и отправлять уведомления об изменениях в пользовательский интерфейс всякий раз, когда свойство источника с привязкой к данным устанавливается в новое значение:

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));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...