2017-04-18 12 views
0

Ich habe ein WPF ControlTemplate, das eine ListView enthält, die ItemsSource an eine Auflistung in meiner Klasse gebunden hat.WPF Bind GridViewColumn zu verschiedenen Eigenschaften

Je nachdem, welche Optionen der Benutzer ich manchmal meinen Gridviewcolumn eines Textwert binden will, aber manchmal mag ich ein anderes tun angezeigt:

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

Was ist der beste Weg, um dies zu realisieren? Je nachdem, welche Daten angezeigt werden, möchte ich entweder an MyText1 oder MyText2 binden. Wie mache ich den "Schalter"?

Antwort

0

Die Art und Weise dies mit einem mehrbindigen zu tun ...

   <GridViewColumn x:Name="DescriptionColumn" Header="{DynamicResource MyHeader}" > 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Style="{StaticResource TextBlockMultiValue}"/> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 

, die die folgenden Ressourcen verwendet ...

<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> 

Und der Konverter wird wie folgt ...

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

So der Konverter wählt zwischen der einen oder anderen Zeichenfolge basierend auf einem dritten Eingang des Konverters.

0

Sie könnten ein Style mit einem DataTrigger verwenden:

<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> 

In der Probe Markup über der Text Eigenschaft der TextBlock wird "MyText2" gebunden werden, wenn die "TriggerProperty" liefert "2".

Verwandte Themen