Setter基于MultipleBinding

时间:2016-04-12 15:17:26

标签: c# wpf binding

我的模型有两个独立的属性:

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

我错过了什么?

1 个答案:

答案 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。

相关问题