2010-01-29 72 views
3

我工作的一个UserControl,它是由一个Chart面板,并且其一些操纵图表数据即图表对照(图的变色,启用或图表上禁用的东西等)的另一区域。将两个UserControl绑定到相同的DataContext或ViewModel?

我使用ViewModel来管理图表及其数据,但一直在想,如果从图表控制区域中创建一个单独的用户控件以防止我的xaml变大并分离出组件,那将会很不错。

如果我这样做虽然,因为控件将需要处理来自ChartViewModel的数据,应该怎么处理它?我可以将Chart控件的DataContext绑定到ChartDataContext,所以我只有一个ViewModel?我应该让自己的图表控件拥有自己的视图模型,然后让图表面板和图表控件viewmodel以某种方式进行交谈?

或者只是忘了一个单独的用户控件,并将所有东西放到一个大的viewmodel/xaml控件中?

在这种情况下,人们会推荐什么?

回答

3

你绝对可以有你的两个UserControl小号绑定到同一ViewModel。您可以每个DataContext绑定到同一个对象实例,或者我想你可以有绑定到其他的DataContext一个控制的DataContext并将其绑定到ViewModel

如果您从视图和视图模型的工作实现开始,并且您觉得XAML变得笨拙,我会同意您应该将XAML分成多个视图。没有理由,这意味着你需要分离你的ViewModel实现,直到你感觉它变得不连贯,或者太大。现在分离它会增加复杂性,因为你建议他们需要沟通。

你可能会考虑通过简单地创建一个UserControl出来的图表控制区域和嵌入您现有的内部控制的控制开始。然后,您不必修改任何使用图表控件的屏幕。

+0

很酷,这绝对会为我简化一些事情。你能提供一个小例子或链接,告诉我如何将每个DataContext绑定到同一个对象实例,或者将一个控件的DataContext绑定到另一个控件的DataContext上?要么应该工作,但我还没有找到语法。谢谢! – Nicros 2010-01-29 17:21:36

+0

想通了,似乎工作还行。 在孩子UserControl: DataContext =“{Binding DataContext,RelativeSource = {RelativeSource FindAncestor,AncestorType = {x:Type local:SpectraView}}}” – Nicros 2010-01-29 22:36:58

+0

请注意相关的源数据绑定。在运行时可能会非常昂贵!为什么不通过它的名字直接绑定到其他元素? – 2010-02-02 00:14:56

相关问题