2017-03-16 5 views
1

두 조건 (OR)에 따라 행의 Visibility을 변경하는 RowStyle을 작성하려고합니다. 모든 행은이 (뷰 모델에서) 부울이 Datagrid에 바인딩의 DataTableTrue OR 값으로 설정되어 있는지 여부를 볼 수 붕괴한다, 기본적으로DataGrid RowStyle - DataTrigger의 바인딩 값

는 현재 사용자에게 동일합니다. 따라서 현재 사용자는 물론 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

당신 하지 뭔가에 DataTriggerValue 속성을 바인딩 할 수 있습니다. 내가 필요 정확히,

<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 (항목), 또는 DataGrid 뒤에있는 ViewModel 또는 Window 뒤의 ViewModel?

아마도 여기에 문제가 있습니까? 이 종속성 속성이 아니기 때문에