2016-09-20 6 views
0

Как использовать преобразовательПараметр в устройстве настройки стиля на ячейке данных? Мне нужно знать имя элемента или имя свойства в моем конверторе.Datagrid cell style with converterParameter

XAML:

<Window.Resources> 
    <view:IsEnabledCellConverter x:Key="IsEnabledCellConverter"/> 
    <Style x:Key="CellStyle" TargetType="{x:Type DataGridCell}"> 
     <Setter Property="IsEnabled" 
       Value="{Binding 
         Path=Item, 
         Converter={StaticResource ResourceKey=IsEnabledCellConverter}, 
         ConverterParameter={?????}}" 
         RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}} /> 
    </Style> 
.../... 

<Datagrid> 
    <DataGrid.Columns> 
     <DataGridTextColumn x:Name="Design" 
          CellStyle="{StaticResource CellStyle}" 
          Value="{Binding Path=Design}"/> 
     <DataGridTextColumn x:Name="FooBar" 
          CellStyle="{StaticResource CellStyle}" 
          Value="{Binding Path=Foobar}"/> 
    </DataGrid.Columns> 
</Datagrid> 

конвертер класс:

class IsEnabledCellConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     string p = (string)parameter; 
     MyItem item = (MyItem)value; 

     switch (p) 
     { 
      case "Design": 
       return string.IsNullOrEmpty(item.Reference); 
       break; 
      case "FooBar": 
       return item.Something != true; 
       break; 
      default: 
       return true; 
     } 
    } 

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

EDIT: Я добавил некоторые детали для понимания потребностей. Так что все мои столбцы IsEnabled реквизита являются обязательным для этого глобального конвертера по двум причинам:

  1. это легче поддерживать нужно
  2. некоторых колонкам, чтобы быть включены в зависимости от значения других значений элементов.
+0

В вашем вопросе, какое имя элемента или имя свойства вы ищете. – AnjumSKhan

+0

Я хотел бы получить имя x: имя DatagridTextColumn или свойство Binding Path, например, «Design» – ebelair

+0

Любые веские причины для этого. Если да, возможно, вам придется использовать 'AttachedProperty'. – AnjumSKhan

ответ

2

Вы должны использовать DisplayIndex или Header и установите ConverterParameter соответственно.

<Style x:Key="CellStyle" TargetType="{x:Type DataGridCell}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Column.DisplayIndex, RelativeSource={RelativeSource Self}}" Value="0"> 
      <Setter Property="IsEnabled" 
        Value="{Binding 
          Path=Item, 
          Converter={StaticResource ResourceKey=IsEnabledCellConverter}, 
          ConverterParameter=0, 
          RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" /> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding Column.DisplayIndex, RelativeSource={RelativeSource Self}}" Value="1"> 
      <Setter Property="IsEnabled" 
        Value="{Binding 
          Path=Item, 
          Converter={StaticResource ResourceKey=IsEnabledCellConverter}, 
          ConverterParameter=1, 
          RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

Сообщите, если это решит вашу проблему.

+0

Не работает, конвертер не называется – ebelair

+0

@ebelair 100% он работает, с соответствующим ConverterParameter. Я проверяю перед публикацией. – AnjumSKhan

+0

@ebelair, если подходит, вы можете зайти в чат http://chat.stackoverflow.com/rooms/18165/wpf – AnjumSKhan