2016-05-22 28 views
0

我有一個文本框,我有一個按鈕。我的數據觸發器沒有觸發

該文本框的值綁定到我的視圖模型。

我的按鈕綁定到我的視圖模型。

當用戶單擊按鈕時,如果文本框爲空,我希望文本顯示'是'。

似乎一切正常,但觸發器似乎不會調用更改。

這是我的UI:

<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,但文本框不顯示 '是'。

回答

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> 
+0

我幾乎在那裏!坦克這麼多! –