2015-04-22 46 views
1

我有一個DataTrigger應用樣式到DataGrid行的Visibility屬性。 DataTrigger在DataGrid的初始綁定上工作得很好(即 ​​- 如果FilteredOut爲true,它將行可見性設置爲摺疊狀態)。DataGrid.RowStyle只適用於初始綁定

我有一個組合框的FilteredOut屬性設置爲true或false爲每個項目取決於什麼用戶在ComboBox已經選擇了的ObservableCollection AllPartMalfunctions

這裏是我的問題:在組合框中選擇一個項目並設置FilteredOut屬性爲每個項目後,DataGrid的行不刷新可見或倒塌和UI上的一切看起來一樣呢在選擇ComboBox中的任何內容之前做過。我錯過了什麼?

這裏是XAML:

<DataGrid ItemsSource="{Binding AllPartMalfunctions}" 
      AutoGenerateColumns="False" Width="Auto"> 
    <DataGrid.RowStyle> 
     <Style TargetType="DataGridRow"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding FilteredOut, Mode=TwoWay}" Value="True"> 
        <Setter Property="Visibility" Value="Collapsed" /> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding FilteredOut, Mode=TwoWay}" Value="False"> 
        <Setter Property="Visibility" Value="Visible" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.RowStyle> 
    <DataGrid.Columns> 
     <!--removed for brevity--> 
    </DataGrid.Columns> 
</DataGrid> 

這裏是視圖模型到的數據網格被綁定:

public class Malfunctions : ViewModelBase { 
     public ObservableCollection<Model.PartMalfunction> AllPartMalfunctions { 
      get; 
      private set; 
     } 
} 

這裏是PartMalfunction型號:

public class PartMalfunction { 
    private bool _filteredOut = false; 
    public bool FilteredOut { 
      get { 
       return _filteredOut; 
      } 
      set { 
       _filteredOut = value; 
      } 
     } 
    } 

回答

2

類「PartMalfucntion 「需要實現System.ComponentModel.INotifyPropertyChanged並在Filte時觸發PropertyChanged事件redOut的值已更改。

public class PartMalfunction : System.ComponentModel.INotifyPropertyChanged 
{ 
    #region INotifyPropertyChanged Members 
    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 
    #endregion 

    private bool _filteredOut = false; 
    public bool FilteredOut 
    { 
     get { 
      return _filteredOut; 
     } 
     set { 
      _filteredOut = value; 
      if (PropertyChanged != null) 
       PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs("FilteredOut")); 
     } 
    } 
} 
+0

這正是我所需要的。由於這樣的有用答案,WPF對我而言每天都變得不那麼神祕。謝謝,JH! – Jagd