【发布时间】:2011-08-21 20:50:31
【问题描述】:
在学习 MVVM 时,我为我的一个视图模型创建了一个 DataTemplate:
<DataTemplate DataType="{x:Type task:NodeDefinitionVM}">
<Ellipse Width="4" Height="4" Fill="Red" >
<Ellipse.RenderTransform>
<TranslateTransform X="{Binding Location.X, Mode=TwoWay}"
Y="{Binding Location.Y, Mode=TwoWay}" />
</Ellipse.RenderTransform>
</Ellipse>
</DataTemplate>
简化视图模型类:
class NodeDefinitionVM : (...)
{
public Point Location
{
get { return model.Location; }
set { model.Location = value; }
}
(...)
}
在我的例子中,模型实现了 INotifyPropertyChanged,因为我需要对模型的所有更改都反映在 View 中(注意 XAML 中的 Mode=TwoWay)。
问题: 设置了变换偏移量(X,Y)的初始值,当“Location”属性发生变化时我会收到通知。但是,没有通知 .X 已更改,并且由于我绑定到 Location.X,因此未更新转换(第一次除外),因为它需要 Location.X 更改通知。 Point 类型是一个轻量级的struct。
问题:是否可以绑定到 .X,同时在 Location.X 链上的任何属性发生变化时更新绑定?有没有像Binding prop1.prop2.prop3 这样的“更长链”的通用解决方案?
【问题讨论】: