Wpf 基于两个属性确定ContentTempateSelector的值

Wpf 基于两个属性确定ContentTempateSelector的值,wpf,xaml,multibinding,datatemplateselector,Wpf,Xaml,Multibinding,Datatemplateselector,我无法更改ContentTemplateSelector的内容。基于两个属性合格性和物品列表,文本块被更新,并通过多重绑定实现。但是,多绑定方法无法应用于模板选择器。这是我的密码: XAML: <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="*" /> </G

我无法更改
ContentTemplateSelector
的内容。基于两个属性
合格性
物品列表
,文本块被更新,并通过多重绑定实现。但是,多绑定方法无法应用于模板选择器。这是我的密码:

XAML:

<Grid>
     <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
     </Grid.ColumnDefinitions>
     <ContentControl
         Grid.Column="0"
         Style="{StaticResource StatusIconStyle}"
         Content="{Binding}"
         ContentTemplateSelector="{StaticResource IconTemplateSelector}" />
     <TextBlock
         Grid.Column="1"
         TextWrapping="Wrap">
         <TextBlock.Text>
             <MultiBinding Converter="{StaticResource ListOfThingsToEligibilityString}">
                   <Binding Path="Eligibility"/>
                   <Binding Path="ListOfThings" />
             </MultiBinding>
         </TextBlock.Text>
      </TextBlock>
</Grid>

模板选择器:

public override DataTemplate IconTempateSelector(object item,...)
    {
        var obj = (CompleteObjectInfo)item;
        bool isEligible = obj.Eligibility.IsEligibile;
        bool hasIssues = obj.ListOfThings != null && obj.ListOfThings.Any();
        List<IThings> things = obj.ListOfThings as List<IThings>;
        //some logic
        if (condition 1)
        {
          return (DataTemplate)App.Current.TryFindResource("SuccessVImage");
        }
        else if (condition 2)
        {
            return (DataTemplate)App.Current.TryFindResource("WarningVImage");
        }
        else if (consition 3)
        {
           return (DataTemplate)App.Current.TryFindResource("ErrorVImage");
        }
        return null;
    }
公共覆盖数据模板IconTempateSelector(对象项,…)
{
var obj=(CompleteObjectInfo)项;
bool isEligible=obj.alification.isEligible;
bool hasIssues=obj.ListOfThings!=null&&obj.ListOfThings.Any();
将事物列为列表;
//一些逻辑
如果(条件1)
{
返回(数据模板)App.Current.TryFindResource(“SuccessVImage”);
}
否则,如果(条件2)
{
返回(数据模板)App.Current.TryFindResource(“WarningVImage”);
}
若非如此(考虑3)
{
返回(数据模板)App.Current.TryFindResource(“ErrorVImage”);
}
返回null;
}
多转换器:

ListOfThingsToEligibilityString :
public object Convert(object[] values,...)
    {
        if (null conditions satisfied)
        {
            EligibilityDetails eligibility = values[0] as EligibilityDetails ;
            List<IThings> things= values[1] as List<IThings>;
            bool isEligible = eligibility.IsEligibile;
            bool hasIssues = things.Any();
            // some code
            if (condition 1)
            {
                return "Message 1";
            }
            else if (condition 2)
            {
                return "Message 2";
            }
            else if (condition 3)
            {
                return "Message3";
            }
            else if (condition 4)
            {
                return "Message 4"
            }
        }
        return string.Empty;
    }
ThingstoeligibilityString列表:
公共对象转换(对象[]值,…)
{
if(满足空条件)
{
EligibilityDetails合格性=值[0]作为EligibilityDetails;
将事物=值[1]列为列表;
bool isEligible=合格性。isEligible;
bool hasIssues=things.Any();
//一些代码
如果(条件1)
{
返回“消息1”;
}
否则,如果(条件2)
{
返回“消息2”;
}
否则,如果(条件3)
{
返回“Message3”;
}
否则,如果(条件4)
{
返回“消息4”
}
}
返回字符串。空;
}

任何帮助都将不胜感激。

当引发
PropertyChanged
事件时,不会触发
ContentTemplateSelector
。它仅用于选择初始的
ContentTemplate

您可以尝试将
ContentTemplateSelector
替换为包含
DataTriggers
样式

<ContentControl Grid.Column="0" Content="{Binding}">
    <ContentControl.Style>
        <Style TargetType="ContentControl" BasedOn="{StaticResource StatusIconStyle}">
            <Style.Triggers>
                <DataTrigger Value="Message 1">
                    <DataTrigger.Binding>
                        <MultiBinding Converter="{StaticResource ListOfThingsToEligibilityString}">
                            <Binding Path="Eligibility"/>
                            <Binding Path="ListOfThings" />
                        </MultiBinding>
                    </DataTrigger.Binding>
                    <Setter Property="ContentTemplate" Value="{StaticResource SuccessVImage}" />
                </DataTrigger>
                <!-- and so on...-->
            </Style.Triggers>
        </Style>
    </ContentControl.Style>
</ContentControl>