2017-04-18 9 views
0

自分のクラスのコレクションにバインドされたItemsSourceを持つListViewを含むWPF ControlTemplateがあります。ユーザーは、私は時々、1つのテキスト値に私のGridViewColumnをバインドしたいが、時々、私は別のものを表示しない欲しい選択したオプションに応じて、WPFはGridViewColumnを別のプロパティにバインドします

<GridViewColumn x:Name="DescriptionColumn" Header="{DynamicResource MyHeader}" > 
    <GridViewColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding MyText1}"/>   
     </DataTemplate> 
    </GridViewColumn.CellTemplate> 
</GridViewColumn> 

これについて移動する最良の方法は何ですか?私が表示しているデータに応じて、MyText1またはMyText2にバインドする必要があります。どうすれば 'スイッチ'を作ることができますか?

答えて

0

これを行う方法がれる多である...

次のリソースを使用しています
   <GridViewColumn x:Name="DescriptionColumn" Header="{DynamicResource MyHeader}" > 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Style="{StaticResource TextBlockMultiValue}"/> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 

...

<local:MultiValueConverter x:Key="MultiValueConverter"/> 
    <Style x:Key="TextBlockMultiValue" TargetType="TextBlock"> 
     <Setter Property="Text"> 
      <Setter.Value> 
       <MultiBinding Converter="{StaticResource MultiValueConverter}"> 
        <Binding Path="MyText1"/> 
        <Binding Path="MyText2"/> 
        <Binding Path="Switch"/> 
       </MultiBinding> 
      </Setter.Value> 
     </Setter> 
    </Style> 

、次のようにコンバータです...

public class MultiValueConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     if ((bool)values[2] == true) 
      return values[0].ToString(); 
     else 
      return values[1].ToString(); 
    } 

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

したがって、コンバータは、コンバータの3番目の入力に基づいて、1つの文字列か別の文字列かを選択しています。あなたがDataTriggerStyleを使用することができ

0

:「TriggerProperty」は「2」を返したとき

<GridViewColumn x:Name="DescriptionColumn" Header="{DynamicResource MyHeader}" > 
    <GridViewColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock> 
       <TextBlock.Style> 
        <Style TargetType="TextBlock"> 
         <Setter Property="Text" Value="{Binding MyText1}" /> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding TriggerProperty}" Value="2"> 
           <Setter Property="Text" Value="{Binding MyText2}" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </TextBlock.Style> 
      </TextBlock> 
     </DataTemplate> 
    </GridViewColumn.CellTemplate> 
</GridViewColumn> 

サンプルマークアップではTextBlockText性質上は「MyText2」にバインドされます。

関連する問題