2016-09-20 17 views
0

datagridセルのスタイル設定ツールでconverterParameterを使用する方法は? 私のコンバータの要素名またはプロパティ名を知る必要があります。converterParameterを使用したDatagridセルスタイル

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> 

Converterクラス:

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(); 
    } 
} 

編集:私はニーズを理解するためのいくつかの詳細を追加しました。 だから、私のすべての列がISENABLED小道具は、2つの理由のために、このグローバルコンバータを結合されています

  1. それは
  2. いくつかの列は、他の項目値の値に応じて有効にする必要が維持する方が簡単です。
+0

あなたの質問には、どの要素名またはプロパティ名をお探しですか? – AnjumSKhan

+0

私はDatagridTextColumnのx:nameや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

これは動作していません、コンバータは適切なConverterParameterで動作しています – ebelair

+0

@ebelair 100%と呼ばれていません。私は投稿する前にチェックする。 – AnjumSKhan

+0

@ebelair適切な場合は、チャットで来ることができます。http://chat.stackoverflow.com/rooms/18165/wpf – AnjumSKhan

関連する問題