4 Stimmen

WPF-Schaltflächeninhalt basierend auf DataContext-Einstellungen

Ich arbeite mit WPF und MVVM-Muster, ich habe eine einfache Ansicht, die aus einer Schaltfläche besteht, die eine Sache oder ein anderes abhängig von einer Eigenschaft des DataContext (viewmodel) anzeigen sollte Ich habe Datatrigger und Datatemplates verwendet, um zu versuchen, dies zu tun, aber aus irgendeinem Grund die Bindung nicht auswertet (oder ich etwas falsch mache).

    <Button x:Class="EpicNavalBattle.View.PositionView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

        >
    <Button.Resources>
        <DataTemplate x:Key="Hidden">
            <Label Content="Hidden"></Label>
        </DataTemplate>
        <DataTemplate x:Key="Shown">
            <Label Content="{Binding Path=Content.ContentName}" />
        </DataTemplate>

    </Button.Resources>
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Revealed}" Value="False">
                    <Setter Property="ContentTemplate" Value="{DynamicResource Hidden}"></Setter>

                </DataTrigger>
                <DataTrigger Binding="{Binding Revealed}" Value="True">
                    <Setter Property="ContentTemplate" Value="{DynamicResource Shown}"></Setter>

                </DataTrigger>
            </Style.Triggers>
        </Style>

    </Button.Style>

</Button>

Nur um Verwirrung zu vermeiden: Content ist eine Eigenschaft des ViewModel (geerbter Datenkontext), das im Grunde die Model-Klasse ist, und ContentName, eine Eigenschaft der Model-Klasse. Das ganze datatemplate IST ausgewertet, denn um dies zu beweisen, änderte ich die Content="Binding...." Zeug für Text, und es zeigt tatsächlich eine Schaltfläche mit dem angegebenen Label innen. Im Moment ist das, was ich sehe, nur Schaltflächen ohne Text (klein, minimale Größe) Jede Hilfe ist willkommen (nicht nur, wie man das Problem löst, sondern auch, was ich hier falsch mache).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X