У меня есть свойство List<Filter> Filters
, которое является ItemSource
из ItemsControl
. То, что я пытаюсь сделать sh, это показать в начале только фильтры, которые имеют свойство IsShown = true
. Затем, когда я пу sh кнопку, чтобы показать остальные фильтры. Можно ли это сделать с помощью XAML? Если нет, какой подход я должен использовать?
Содержимое Filter class
:
public List<string> Options { get; set; } = new List<string>();
public bool IsShown { get; set; }
public string Title { get; set; }
public string ValueSelected { get; set; }
public Filter(List<string> Options, string Title, string ValueSelected, bool IsShown)
{
this.Options = Options;
this.Title = Title;
this.ValueSelected = ValueSelected;
this.IsShown = IsShown;
}
В MainContext
Я определил список и кнопку:
public ObservableCollection<Filter> Filters { get; set; } = new ObservableCollection<Filter>();
public ICommand DoShowHide
В MainWindow.XAML
на данный момент у меня есть следующее:
<ItemsControl ItemsSource="{Binding Filters}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" Visibility="{Binding Path=IsShown, Converter={StaticResource BoolToVisConverter} }" Name="MyStackPanel">
<TextBlock Text="{Binding Title}"/>
<ComboBox ItemsSource="{Binding Path=Options}"
SelectedValue="{Binding Path=ValueSelected}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Button Content="Show/Hide" Command="{Binding DoShowHide}"/>
с упоминанием, что я определил конвертер
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVisConverter" />
</Window.Resources>
**** У меня есть попытался установить для свойства IsShown
всех фильтров значение true при нажатии кнопки sh. Не нужно упоминать, что это не сработало ...
private void ShowHide(object obj)
{
MessageBox.Show("message");
foreach(Filter filter in Filters)
{
if(filter.IsShown == false)
{
filter.IsShown = true;
NotifyPropertyChanged("Filters");
}
}
}
Спасибо, что нашли время прочитать мой вопрос :)