我的模型有两个独立的属性:
enumType DataType
SomeSpec DataSpec
基于DataType
的值我想非常地解释DataSpec
<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>
我正在使用以下转换器实现
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[] {};
}
}
实现这一点我希望在我的窗口中看到一个图像,但是我只看到一个文本 MyNameSpace.DataContent
我错过了什么?
答案 0 :(得分:1)
我认为您的DataTrigger绑定基于ContentControl的DataContext。
<DataTrigger Binding ="{Binding DataType}" Value ="Image">
所以,它正在查看ContentControl.DataContext.DataType。
我认为您想要的是查看ContentControl内容的DataType属性。尝试将DataTrigger更改为:
<DataTrigger Binding ="{Binding Content.DataType, RelativeSource={RelativeSource Self}}" Value ="Image">
所以现在它正在查看ContentControl.Content.DataType。 RelativeSource部分将绑定指向ContentControl而不是ContentControl.DataContext。