2016-04-12 2 views
0

Mein Modell hat zwei unabhängige Eigenschaften:Setter basierend auf MultipleBinding

enumType DataType 
SomeSpec DataSpec 

basierend auf dem Wert von DataType würde Ich mag die DataSpec interpretieren accordantely

<ContentControl DataContext ="{Binding}"> 
    <MultiBinding Converter ="{StaticResource DataContentConverter}"> 
     <Binding Path ="DataType"/> 
     <Binding Path ="DataSpec"/> 
    </MultiBinding> 


    <ContentControl.Style> 
     <Style TargetType ="ContentControl"> 
      <Style.Triggers> 
       <DataTrigger Binding ="{Binding DataType}" Value ="Image"> 
        <Setter Property ="Template"> 
         <Setter.Value> 
          <ControlTemplate> 
           <Image Source ="{Binding Image, Mode = OneWay}"/> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ContentControl.Style> 

</ContentControl> 

Ich bin mit der folgenden Konverter Implementierung

public class DataViewConverter: IMultiValueConverter 
{ 

    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (values[0] as enumType == null) return null; 


     var selectedType = (enumType)values[0]; 
     var selectedObject = (SomeSpec)values[1]; 

     switch (selectedType) 
     { 
      case enumType.Thumbnail: 
      case enumType.DisplayImage: 
       { 


        return new DataContent 
           { 
            DataType = ReducedDataType.Image, 
            Image = SelectedObject.GetBitmapImage() 
           }; 
       } 

      case ... 

      default: 
       { 
        return new DataContent 
           { 
            DataType = ReducedDataType.Unknown, 
            Text = "Content Viewer is not implemented!" 
           }; 
       } 
     } 
    } 

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

Umsetzung dieser erwarte ich s ee ein Bild in meinem Fenster, aber instaliert davon sehe ich nur einen Text MyNameSpace.DataContent

Was vermisse ich?

Antwort

1

Ich denke, dass die Bindung Ihres DataTriggers auf dem DataContext des ContentControl basiert.

<DataTrigger Binding ="{Binding DataType}" Value ="Image"> 

So sieht es ContentControl.DataContext.DataType.

Ich denke, was Sie wollen, ist es, um die DataType-Eigenschaft des ContentControl-Inhalts zu betrachten. Versuchen Sie, die Datatrigger zu diesem Wechsel:

<DataTrigger Binding ="{Binding Content.DataType, RelativeSource={RelativeSource Self}}" Value ="Image"> 

So, jetzt ist es an ContentControl.Content.DataType suchen. Der RelativeSource-Teil leitet die Bindung an das ContentControl statt an ContentControl.DataContext.

+0

Vielen Dank, Ihre Annahme hat funktioniert! Konnte mein Bild nach der Änderung in und in Tags anzeigen. Der Wert des Bild-Tags ist