控件绑定是否可能表现为OneWayToSource
和OneTime
?
这是一些背景:我有一个数据网格。每行都有文本单元格和checkbox
。如果选择checkbox
,则会保存该行中的数据。现在,当用户开始键入任何文本单元格时,我更改了ViewModel中的IsChecked
属性,以便检查checkbox
。我希望这只发生一次。因此,例如,如果用户开始输入并决定取消选中checkbox
我不想在用户再次开始输入值时更改它。
对我而言,设置与OneWayToSource
和OneTime
的绑定应该是一个解决方案,但我知道绑定模式只能设置为单个值。我一直在寻找一些建议和可能的解决方法,以达到类似的结果,但没有结果。
答案 0 :(得分:1)
来自msdn:
OneTime仅在应用程序启动时更新目标属性 或者当DataContext经历更改时
这意味着使用OneWayToSource
和OneTime
的组合无法解决您的问题,因为“一次性”更新不会触发属性第一次更改但在应用程序启动时或datacontext改变。
当您将文本单元格文本绑定到某个属性时,如果应设置IsChecked
,则可以在该属性中进行控制。
private string text_ = "";
private bool isChecked_ = false;
private bool autoSetChecked_ = true;
public bool IsChecked
{
get
{
return isChecked_;
}
set
{
if (isChecked_ == value) {
return;
}
// If user manually changes check state assume the user wants to keep that state
// => Disable auto changing.
autoSetChecked_ = false;
isChecked_ = value;
OnPropertyChanged("IsChecked");
}
}
public Text
{
get
{
return text_;
}
set
{
if (text_ == value) {
return;
}
text_ = value;
OnPropertyChanged("Text");
if (autoSetChecked_) {
// Only set is checked if not done ever before.
autoSetChecked_ = false;
IsChecked = true;
}
}
}
修改:这需要您的IsChecked
- Binding是TwoWay,因此您可以更改视图模型中的复选框。