数据绑定到UserControl

时间:2012-02-19 09:45:59

标签: c# wpf xaml

我有一个viewModel,用于绑定用户控件。用户控件基本上是AdRotator。 AdRotator的一个特点是它可以在同一屏幕上的多个位置使用。单独的广告组将显示在这些多个adRotator上。单视图模型公开了4个可观察的集合,这些集合是针对不同位置的adRotators进行的。我的问题是,由于用户控件是'拖放'使用我正在寻找一种识别方法,让我确定adRotator应该绑定哪个observablecollection(4)。请让我知道有什么方法。

如果我检索用户控件的名称并根据名称绑定集合,这会是一个好方法吗?

2 个答案:

答案 0 :(得分:0)

我不知道您的视图模型的细节,因此我将提供一般表达的可能方法。

假设您有一个包含四个子视图模型的视图模型,这些模型是具有用户控件中的绑定正在查找的属性的所有变体,并且名为Vm1,Vm2等,在您的情况下可能是您的广告集合。您可以将用户控件的每个实例的DataContext绑定到每个子视图模型。

    <my:SampleUserControl DataContext="{Binding Path=Vm1}" />
    <my:SampleUserControl DataContext="{Binding Path=Vm2}" />
    <my:SampleUserControl DataContext="{Binding Path=Vm3}" />
    <my:SampleUserControl DataContext="{Binding Path=Vm4}" />

这样,用户控件的每个实例都可以绑定并显示不同的数据。

答案 1 :(得分:0)

ViewModel适用于应用程序的逻辑部分。对于可重用的控件,我会创建一个带有代码的常规UserControl。此控件可以通过属性和事件公开API,在您的情况下,将公开一个可以获取“广告”列表的依赖项属性。

通过这种方式,您可以将它们全部放置在视图中,其中每个AdRotator控件都绑定到不同的集合。这样,逻辑只能位于一个位置 - ViewModel,可重用的UI将位于专用控件中。

View + ViewModel用于逻辑分离(Single Responsibility Principle,SRP),其中可重用控件用于重用(或DRY:不要重复自己)。确定您正在使用哪种类型的控件非常重要。常规可重用控件不应包含ViewModel。