2014-03-12 82 views
1

我有一個列表框,我想要做的就是摺疊基於我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 
    } 
} 

我嘗試了這些建議herehere或類似的東西,但我只是不能隱藏的項目。

任何幫助正確的方向將是偉大的,歡呼聲。

編輯

我已經試過布拉姆的建議如下這樣的,但仍無法掩飾的項目:

<ListBox.Resources> 
<Style TargetType="ListBoxItem"> 
    <Setter Property="Visibility" Value="{Binding Path=CurrentIsVisible, Converter={StaticResource b2v}}" /> 
</Style> 

+0

我們通常不會在使用MVVM時處理'Click'事件,而寧願在視圖模型中使用'ICommand's。我們在刪除UI元素時也不會隱藏UI元素,而是從視圖模型中的集合中刪除它們。 – Sheridan

+0

我同意,這就是爲什麼我提到Click事件是一個jippo來模擬我的虛擬機中調用的命令。純粹用於測試。 – ceebreenk

回答

0

這是相當令人沮喪,而且該解決方案那麼簡單使用它。我的客戶模型與IsVisible是在一個DLL和NotifyPropertyChanged()的變化從來沒有建立更新我的項目中的參考..因此,綁定從未發生過。這些深夜正在收費。

0

您將需要設立一個轉換器,如果你是返回真/假,但有一個系統轉換器

將其上移到資源
我知道我有這樣

<ListBox x:Name="lb" ItemsSource="{Binding}" DisplayMemberPath="Text"> 
    <ListBox.Resources> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="Visibility" Value="{Binding Path=Vis}" /> 
     </Style> 
    </ListBox.Resources> 
</ListBox> 
+0

Blam,謝謝你,但我仍然無法隱藏/摺疊物品。我編輯了我的問題以顯示我做了什麼。 – ceebreenk

+1

不知道該說些什麼。這對我有用。嘗試一個硬編碼摺疊 - 它可能是一個綁定或轉換器的問題。 – Paparazzi