2012-02-19 90 views
1

我有一个viewModel用于绑定到用户控件。用户控件基本上是一个AdRotator。 AdRotator的一个特点是它可以在同一屏幕上的多个位置使用。分开的一组广告将显示在这些多个adRotators上。单视图模型公开了4个可观察的集合,这些集合是针对各个位置上的adRotator进行处理的。我的问题是,由于用户控件是'拖ñ下降'使用我是一个鉴定方法,可以让我确定哪些observablecollection(的4)应该一个adRotator绑定到。请让我知道这是什么方法。数据绑定到UserControl

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

回答

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}" /> 

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

0

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

这样,您可以将它们全部放在视图中,其中每个AdRotator控件绑定到不同的集合。这样一来,逻辑就只能放在一个地方 - ViewModel,而可重用的用户界面将处于专门的控制之中。

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

相关问题