У меня есть список, и все, что я хочу сделать, это свернуть элемент списка на основе логического свойства моего SelectedItem. Свойство IsVisible в моей клиентской модели реализует событие NotifyPropertyChanged.
Обзор. У меня есть список клиентов, на которых пользователи могут выполнять CRUD. Когда они удаляются, я устанавливаю логическое свойство в модели, которую моя виртуальная машина предоставляет представлению. Затем это должно скрыть только «удаленную» строку из списка. Во время сброса в БД я CRUD на основе режима модели.
<ListBox Name="listClients"
Grid.Column="1" Grid.Row="1"
Margin="0" BorderThickness="0"
Height="auto"
Style="{StaticResource BumListBox}"
SelectionMode="Extended"
ItemsSource="{Binding Path=ClientList}"
SelectedItem="{Binding SelectedClient, Mode=TwoWay}"
Tag="{Binding DataContext, RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}" >
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsVisible}" Value="False">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding ClientNo}" Foreground="White" FontSize="{StaticResource HeaderFontSize}" VerticalAlignment="Center" />
<TextBlock Grid.Column="1" Text="{Binding ClientDesc}" Foreground="White" FontSize="{StaticResource SubHeaderFontSize}" FontWeight="Light" VerticalAlignment="Center" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Код для процесса jippo MVVM:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
if (_cvm.SelectedClient != null)
{
_cvm.SelectedClient.IsVisible = !_cvm.SelectedClient.IsVisible;
_cvm.CurrentSelectedIsVisible = _cvm.SelectedClient.IsVisible; //<- another option to bind to
}
}
Я попробовал эти предложения здесь и здесь или что-то подобное, но я просто не могу скрыть элементы.
Любая помощь в правильном направлении будет здорово, ура.
Изменить
Я попробовал предложение Блама ниже, но все еще не смог скрыть элементы:
<ListBox.Resources>
<Style TargetType="ListBoxItem">
<Setter Property="Visibility" Value="{Binding Path=CurrentIsVisible, Converter={StaticResource b2v}}" />
</Style>
Click
при использовании MVVM, вместо этого предпочитая использоватьICommand
в модели представления. Мы также не скрываем элементы пользовательского интерфейса при их удалении, а удаляем их из коллекций в модели представления. - person Sheridan   schedule 13.03.2014