我有一個列表框,我想要做的就是摺疊基於我SelectedItem的布爾屬性的listboxitem。 我的客戶端模型上的IsVisible屬性實現NotifyPropertyChanged事件。WPF ListBox項目崩潰datatrigger不工作
概述 - 我有一個用戶可以在其上執行CRUD的客戶列表。當他們刪除時,我在模型上設置了一個布爾屬性,我的虛擬機暴露給View。這應該只隱藏列表中的'已刪除'行。在基於模型模式的db I 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
}
}
我嘗試了這些建議here和here或類似的東西,但我只是不能隱藏的項目。
任何幫助正確的方向將是偉大的,歡呼聲。
編輯
我已經試過布拉姆的建議如下這樣的,但仍無法掩飾的項目:
<ListBox.Resources>
<Style TargetType="ListBoxItem">
<Setter Property="Visibility" Value="{Binding Path=CurrentIsVisible, Converter={StaticResource b2v}}" />
</Style>
我們通常不會在使用MVVM時處理'Click'事件,而寧願在視圖模型中使用'ICommand's。我們在刪除UI元素時也不會隱藏UI元素,而是從視圖模型中的集合中刪除它們。 – Sheridan
我同意,這就是爲什麼我提到Click事件是一個jippo來模擬我的虛擬機中調用的命令。純粹用於測試。 – ceebreenk