我的数据触发器不会触发

时间:2016-05-22 08:29:50

标签: wpf mvvm

我有一个TextBox,我有一个按钮。

文本框值绑定到我的视图模型。

我的按钮绑定到我的视图模型。

当用户点击该按钮时,我希望文字显示“是”'如果文本框为空。

一切似乎都有效,但触发器似乎没有调用更改。

这是我的用户界面:

<TextBox Name="txtFirstName" 
         Text="{Binding BookingWizard.CustomerRecord.FName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
    <TextBox.Style>
        <Style TargetType="TextBox">
            <Style.Triggers>
                    <DataTrigger Binding="{Binding BookingWizard.IsCustomerFNameValid}" Value="False">
                        <Setter Property="Text" Value="yes" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>

我的视图模型:

public ICommand ValidateForm
{
    get
    {
        if (_validateForm == null)
        {
            _validateForm = new BookingCommand(
                  param => Validate()         
            );
        }
        return _validateForm;
    }
}
private void Validate()
{
    if (CustomerRecord.FName.Trim()=="")
    {
        IsCustomerFNameValid = false;
    }
    else
    {
        IsCustomerFNameValid = true;
    }
}

public bool IsCustomerFNameValid 
{
     get { return _IsCustomerFNameValid; } 
     set { 
        _IsCustomerFNameValid = value; 
        RaisePropertyChanged("IsCustomerFNameValid"); 
     } 
}

当我调试时,我可以看到IsCustomerFNameValid设置为false,但文本框未显示“是”&#39;。

1 个答案:

答案 0 :(得分:1)

您将文本直接设置为TextBlock标记的属性。这将覆盖样式中的任何值。将它移到样式本身:

 <TextBox Name="txtFirstName">
        <TextBox.Style>
            <Style TargetType="TextBox">
                <Setter Property="Text" Value="{Binding BookingWizard.CustomerRecord.FName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding BookingWizard.IsCustomerFNameValid}" Value="False">
                        <Setter Property="Text" Value="yes" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>