0

我想在按钮内设置一个不同的内容模板,就像一个切换按钮一样,这取决于我的 ViewModel 的状态。我已经相当简化了代码,但是在每个数据模板中,按钮的内容绘制了不同的路径几何图形,以及一个文本块。

内容选择器类:

public class ContentSelector : DataTemplateSelector {
    public DataTemplate TrueTemplate { get; set; }
    public DataTemplate FalseTemplate { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container) {
        if ((bool)item)
            return TrueTemplate;
        return FalseTemplate;
    }
}

编辑:向按钮添加属性以设置其内容,其中“状态”是我的 ViewModel 中的布尔值,转换器只是根据我的 ViewModel 的状态返回“T”或“F”

XAML:

<DataTemplate x:Key="HeaderTemplate">
    <ContentPresenter>
        <ContentPresenter.Content>
            <DockPanel LastChildFill="False">
                <Button  Content="{Binding State, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ButtonContentConverter}}" Command="{Binding ToggleCommand}">>
                    <Button.ContentTemplateSelector>
                        <ContentSelector>
                            <local:ContentSelector.TrueTemplate>
                                <DataTemplate>
                                    <TextBlock Text="T" ... />
                                </DataTemplate>
                            </local:ContentSelector.TrueTemplate>
                            <local:ContentSelector.FalseTemplate>
                                <DataTemplate>
                                    <TextBlock Text="F" ... />
                                </DataTemplate>
                            </local:ContentSelector.FalseTemplate>
                        </ContentSelector>
                    </Button.ContentTemplateSelector>
                </Button>
            </DockPanel>
        </ContentPresenter.Content>
    </ContentPresenter>
</DataTemplate>

我似乎无法在我的 ContentSelector 类中打断点。它在设计器中确实有效,这意味着如果我将按钮的内容更改为“T”或“F”,如果我将其更改为在 ContentSelector 类中返回相应的 DataTemplate,但是当我运行应用程序时它永远不会点击 ContentSelector,并且内容该按钮是完全空的。

关于为什么会发生这种情况的任何想法?我尝试将按钮的内容设置为我的 ViewModel 的状态,并使用转换器将其更改为布尔值,认为必须设置按钮的内容才能触发 ContentSelector,但它没有工作。

4

0 回答 0