这是我的模特:
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根据我的规则更改其值时)
答案 0 :(得分:0)
您应该为PropertyChanged
实现一个IsMaxReactionTimeCorrect
。如果不是,则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
{
}