假设我在画布上有一个ItemsControl。
每个项目都有自己的位置,但我希望所有项目都有相同的宽度。因此,如果用户在一个地方更改它,所有项目都会被更新。做这件事最干净的方法是什么?
现在我看到了两个解决方案。
{Binding ElementName=MyItemsContainer, Path=DataContext.Width}
获得。第二种解决方案的缺点是添加了依赖项。首先,必须有一个名为ItemsControl的ItemsControl(这使得不可能在一个不同的名称ItemsControl中使用该项),并且ItemsControl的DataContext需要有一个宽度属性。
我感兴趣的是寻找替代的解决方案,或者人们在这两种解决方案中取得的经验。
发布于 2010-02-20 07:58:20
如果您通过在尽可能高的级别上声明属性来消除冗余(即。您的父视图模型),可以:
ItemsControl
中的每个项目建立子视图模型。此子视图模型也可以公开相同的属性,但可以转发对父视图模型的所有访问。请注意,这需要子视图模型也从父视图模型转发属性更改事件。通过将子属性绑定到父属性,您可以使用桁架来简化操作。Binding
的RelativeSource
而不是ElementName
,这样至少可以消除对特定命名ItemsControl
的依赖。https://stackoverflow.com/questions/2302573
复制相似问题