【问题标题】:Data binding to a UserControl数据绑定到 UserControl
【发布时间】:2012-02-20 01:01:34
【问题描述】:

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

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

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      假设您有一个包含四个子视图模型的视图模型,它们都是具有用户控件中的绑定正在寻找的属性的变体,并命名为 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}" />
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-15
        • 2019-05-08
        • 2012-09-27
        • 2013-06-03
        • 1970-01-01
        相关资源
        最近更新 更多