【问题标题】:Where can I use a DataTemplate in something that isn't a repeater type of control?在不是中继器类型的控件中,我可以在哪里使用 DataTemplate?
【发布时间】:2013-03-31 20:55:33
【问题描述】:

好的,我知道这有点奇怪,但我正在尝试创建一个数据驱动面板,该面板根据我在对象上拥有的 DataTemplate 成员重新配置自身。现在,我通过使用绑定到 1 个虚假项目的虚拟列表的 ItemsControl 来完成此操作,以便获得数据模板的单个实例。必须在 ItemsControl 中执行此操作似乎很愚蠢,但如果不尝试针对项目列表执行此操作,我想不出任何会使用我的 DataTemplate 的东西。有人知道吗?

为了清楚起见,假设我有一个 Widget 类:

public class Widget
{
   public string Name { get; set; }
   public DataTemplate MyTemplate { get; set; }

   public List<object> DummyList = new List<object> { new object(); } 
}

和 Xaml 类似:

<ItemsControl ItemsSource={Binding DummyList} ItemTemplate={Binding MyTemplate}/>

然后我可以创建一个小部件集合,并根据对象的状态使用正确的数据模板填充每个小部件。

无论如何,正如我所说,这行得通...如果有人知道的话,我只想找到一个比使用 ItemsControl 更优雅的解决方案。

【问题讨论】:

    标签: wpf xaml datatemplate


    【解决方案1】:

    如果您的控件(您希望动态修改其内容 - 例如内部按钮等)是ContentControl,您也可以只设置ContentTemplate="{Binding template}"。我发现它经常被“忽视”,因为它不是立即可见或直观的,但可以节省您添加额外的“内容”。

    或者您可以使用ContentControl - 或已建议的演示者。

    【讨论】:

      【解决方案2】:
      <ContentPresenter ContentTemplate="{Binding MyTemplate}"/>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-28
        • 1970-01-01
        • 1970-01-01
        • 2019-07-11
        • 2012-08-22
        • 1970-01-01
        相关资源
        最近更新 更多