【发布时间】:2016-01-21 11:23:35
【问题描述】:
我的 ViewModel 中有两个属性:
public double Start { get; set; }
public double Duration { get; set; }
我的视图中有三个文本框:
<TextBox Name="StartTextBox" Text="{Binding Start}" />
<TextBox Name="EndTextBox" />
<TextBox Name="DurationTextBox" Text="{Binding Duration} />
我想实现以下行为:
- 当用户更改 Start- 或 EndTextBox 的内容时,DurationTextBox 应相应更新(Duration = End - Start)。
- 当用户更改 DurationTextBox 时,应相应更新 EndTextBox(结束 = 开始 + 持续时间)。
我可以通过在后面的代码中监听 TextChanged 事件来实现这一点。不过,我更愿意通过 MultiBinding 来实现这一点。有可能吗?
我在尝试使用 MultiBinding 时遇到的问题:
- 如果我将 MultiBinding 放在 DurationTextBox 上,我无法将它绑定到 Duration 属性。
- 如果我将 MultiBinding 放在 EndTextBox 上并且用户更改了 StartTextBox,则会更新 EndTextBox 而不是 DurationTextBox。
- 无论如何我都无法实现 ConvertBack 方法。
【问题讨论】:
-
这样的行为应该在视图模型中实现。当例如
Start属性发生变化,视图模型也在内部更新其Duration属性。这些属性当然也应该触发 PropertyChanged 事件。 -
@Clemens 这听起来很合理。这意味着,我添加了第三个属性 End 并将所有逻辑放在这些属性的设置器中,对吗?
-
没错。并且视图模型类应该实现 INotifyPropertyChanged 接口。
标签: c# wpf multibinding imultivalueconverter