Frage

Ich habe das folgende XAML:

<TextBlock Text="{Binding ElementName=EditListBox, Path=SelectedItems.Count}" Margin="0,0,5,0"/>
<TextBlock Text="items selected">
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=EditListBox, Path=SelectedItems.Count}" Value="1">
                    <Setter Property="TextBlock.Text" Value="item selected"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

Der erste Textblock ändert sich fröhlich mit SelectedItems.Count und zeigt 0,1,2 usw. an.Der Datenauslöser im zweiten Block scheint nie auszulösen, um den Text zu ändern.

Irgendwelche Gedanken?

War es hilfreich?

Lösung

Der Datatrigger feuert, aber das Textfeld für Ihren zweiten Textblock ist hartcodiert als „Elemente ausgewählt“, so dass es nicht in der Lage sein wird, zu ändern. Um zu sehen, Brennen Sie es, Sie Text entfernen = „Elemente ausgewählt“.

Ihr Problem ist ein guter Kandidat eines Valueconverter statt Datatrigger für die Verwendung. Hier ist, wie zu erstellen und den Valueconverter benutzen Sie den Text zu setzen, was Sie wollen.

Erstellen Sie diese Valueconverter:

public class CountToSelectedTextConverter : IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if ((int)value == 1)
            return "item selected";
        else
            return "items selected";
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}

Fügen Sie den Namespace Bezug auf Ihr der Montage der Wandler befindet:

xmlns:local="clr-namespace:ValueConverterExample"

Fügen Sie den Konverter an Ihre Ressourcen:

<Window.Resources>
    <local:CountToSelectedTextConverter x:Key="CountToSelectedTextConverter"/>
</Window.Resources>

ändern Sie Ihren zweiten Textblock an:

    <TextBlock Text="{Binding ElementName=EditListBox, Path=SelectedItems.Count, Converter={StaticResource CountToSelectedTextConverter}}"/>

Andere Tipps

Alternativ können Sie Ihr XAML durch Folgendes ersetzen:

<TextBlock Margin="0,0,5,0" Text="{Binding ElementName=EditListBox, Path=SelectedItems.Count}"/>
<TextBlock>
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="Text" Value="items selected"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=EditListBox, Path=SelectedItems.Count}" Value="1">
                    <Setter Property="Text" Value="item selected"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

Konverter können viele Bindungsprobleme lösen, aber viele spezialisierte Konverter zu haben, kann sehr chaotisch sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top