DataTrigger не запускается

Я так разочарован здесь... Я не могу заставить эти датриггеры постоянно работать..

Это работает, когда я впервые запускаю программу, когда я инициализирую глобальный класс UdpMessageAuthentication (так как он устанавливает для него "test0"... но затем у меня есть кнопка, которая вызывает метод SendAuthPacket.. и после отладки я вижу, что она переходит в OnPropertyChanged когда я нажимаю кнопку, но метка не меняет заголовок, цвет или любое другое свойство... как только я использую AuthenticateStatus для "test1".

Очевидно, я пробовал более реалистичные переменные, кроме test0 и test1, но независимо от того, что я делаю, я не могу получить триггеры для обновления

Пожалуйста, помогите =T

<Label Name="Label_Authentication" Margin="5,0,0,0" VerticalAlignment="Center" Grid.Column="0" FontSize="14">
<Label.Style>
    <Style TargetType="Label">
        <Setter Property="Content" Value="Initial Content"></Setter>
        <Setter Property="Foreground" Value ="Red"></Setter>

        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=AuthenticateStatus}" Value="test0">
                <Setter Property="Content" Value="Authentication Required" />
                <Setter Property="Foreground" Value="Red"></Setter>
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=AuthenticateStatus}" Value="test1">
                <Setter Property="Content" Value="Attempting Authentication..." />
                <Setter Property="Background" Value="Blue"></Setter>
            </DataTrigger>
            etc....


public class UdpMessageAuthentication : INotifyPropertyChanged
{
    private string _authenticateStatus;

    public string AuthenticateStatus
    {
        get { return _authenticateStatus; }
        set
        {
            if (_authenticateStatus != value)
            {
                _authenticateStatus = value;
                OnPropertyChanged("Authenticate Status");
            }
        }
    }

    public UdpMessageAuthentication()
    {
        _udpClient = new UdpClient();
        AuthenticateStatus = "test0";
    }

    public void SendAuthPacket(IPAddress ip, string userID)
    {
        etc etc....
        AuthenticateStatus = "test1";
        etc etc....
    }

1 ответ

Решение

Убедитесь, что вы явно установили свойство режима при использовании (любой) привязки.

<DataTrigger Binding="{Binding Path=AuthenticateStatus, Mode=OneWay}" Value="test0">

Кроме того, вы должны убедиться, что вы вызываете событие измененного свойства со строкой PropertyName, в которой точно задано имя вызываемого объекта, поскольку система использует Reflection под капотом, чтобы найти измененное свойство на основе указанной строки. Таким образом, попробуйте использовать это в вашей ViewModel:

get { return _authenticateStatus; }
set
{
    if (_authenticateStatus != value)
    {
        _authenticateStatus = value;
        OnPropertyChanged("AuthenticateStatus");
    }
}
Другие вопросы по тегам