2017-03-16 66 views
1

我想構建一個RowStyle,它根據兩個條件(OR)更改行的VisibilityDataGrid RowStyle - DataTrigger中的綁定值

每默認情況下所有行應摺疊的可見布爾(在視圖模型)是否被設置爲True OR值在DataTable,綁定到Datagrid,等於當前用戶。因此,當前的用戶當然也是一個Property。

<DataGrid.RowStyle> 
    <Style TargetType="{x:Type DataGridRow}"> 
     <Setter Property="Visibility" Value="Collapsed" /> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window},Mode=FindAncestor},Path=DataContext.ColleaguesVisible}" Value="True"> 
       <Setter Property="Visibility" Value="Visible" /> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding CreatingUser}" Value="{Binding CurrentStaffMember}"> 
       <Setter Property="Visibility" Value="Visible" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGrid.RowStyle> 

但在值綁定有錯誤......

我已經四處搜尋,但我無法找到一個解決這個問題。

我希望有人能幫助我。

回答

2

不能Value屬性綁定到DataTrigger的東西,因爲它不是一個依賴項屬性。

你可以做的是使用轉換器:

<DataGrid ... x:Name="dgr" xmlns:local="clr-namespace:WpfApp2"> 
    <DataGrid.Resources> 
     <local:Converter x:Key="conv" /> 
    </DataGrid.Resources> 
    <DataGrid.RowStyle> 
     <Style TargetType="{x:Type DataGridRow}"> 
      <Setter Property="Visibility" Value="Collapsed" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window},Mode=FindAncestor},Path=DataContext.ColleaguesVisible}" Value="True"> 
        <Setter Property="Visibility" Value="Visible" /> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding Path=., Converter={StaticResource conv}}" Value="True"> 
        <Setter Property="Visibility" Value="Visible" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.RowStyle> 
</DataGrid> 

namespace WpfApp2 
{ 
    public class Converter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      DataRowView drv = value as DataRowView; 
      if(drv != null) 
      { 
       return drv["CreatingUser"].ToString() == drv["CurrentStaffMember"].ToString(); 
      } 
      return false; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 
} 
+0

謝謝,正是我需要的。無論如何,我將UsersTuff移出到了'DataRowView.Filter',但是在'Button's中我也需要這個。 – SecretOssi

0

'CreatingUser'在哪裏?在行DataContext(您的項目),或在ViewModel後面的DataGrid,或ViewModel後面的窗口?

也許這是你的問題?