[英]Binding in MVVM WPF with Caliburn.Micro
這是我的模型:
public class ValidatedExaminationAnswerModel : ExaminationAnswerModel, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public bool IsCorrect { get; set; } = false;
}
public class ObservableExaminationSettingModel
{
public string MaxReactionTime { get; set; }
public bool IsMaxReactionTimeCorrect { get; set; } = false;
public ObservableCollection<ValidatedExaminationAnswerModel> CorrectAnswers { get; set; } = new ObservableCollection<ValidatedExaminationAnswerModel>();
}
public Dictionary<string, ObservableExaminationSettingModel> CasesAnswers { get; set; }
這是我的Xaml:
<ListView.View>
<GridView>
<GridViewColumn
Header="{x:Static localization:Resources.TestCaseNameLable}"
DisplayMemberBinding="{Binding Key}" />
<GridViewColumn Header="Reaction Time">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Grid.Column="1" >
<TextBox.Text>
<Binding Path="Value.MaxReactionTime"
UpdateSourceTrigger="PropertyChanged"/>
</TextBox.Text>
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsMaxReactionTimeCorrect, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Value="True">
<Setter Property="Background" Value="White"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsMaxReactionTimeCorrect, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Value="False">
<Setter Property="Background" Value="IndianRed"/>
</DataTrigger>
</Style.Triggers>
<Setter Property="cal:Message.Attach" Value="[Event KeyUp] = [Action IsReactionTimeCorrect($dataContext)]"/>
</Style>
</TextBox.Style>
</TextBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
我想將IsMaxReactionTimeCorrect屬性綁定到樣式,以顯示何時值不正確但什么也沒發生的情況,似乎xaml只是看不到此變量。 我不知道為什么。 (當IsMaxReactionTimeCorrect根據我的規則更改其值時)
您應該為IsMaxReactionTimeCorrect
實現PropertyChanged
。 如果不是,則View不會知道您的媒體資源是否更改了他的值。
public class ObservableExaminationSettingModel : INotifyPropertyChanged
{
public string MaxReactionTime { get; set; }
private bool _isMaxReactionTimeCorrect ;
public bool IsMaxReactionTimeCorrect
{
get
{
return _selected;
}
set
{
_selected = value;
RaisePropertyChanged("IsMaxReactionTimeCorrect");
}
}
public ObservableCollection<ValidatedExaminationAnswerModel> CorrectAnswers { get; set; } = new ObservableCollection<ValidatedExaminationAnswerModel>();
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void RaisePropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
如果使用Fody
注入PropertyChanged
事件,則模型必須實現INotifyPropertyChanged
public class ObservableExaminationSettingModel : INotifyPropertyChanged
{
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.