无法将 ItemsControl.ItemTemplate 绑定到 List<object> 元素
Can't bind ItemsControl.ItemTemplate to List<object> element
我有麻烦了。我创建了如下所示的 UserControl:
http://i.stack.imgur.com/ITxkS.jpg
我有依赖项 属性 "Text" 绑定到 UserControl 的 TextBlock.Text。我想创建另一个可视化列表的 UserControl。这是我的代码:
<UserControl x:Class="ListPresenter.ListViewer"
xmlns:dop="clr-namespace:DeletableObjectPresenter;assembly=DeletableObjectPresenter"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<ItemsControl ItemsSource="{Binding List, RelativeSource={RelativeSource AncestorType=UserControl}}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel></WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<ItemContainerTemplate>
<dop:DeletableObjectPresenter></dop:DeletableObjectPresenter>
</ItemContainerTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
...
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
namespace ListPresenter
{
/// <summary>
/// Interaction logic for ListViewer.xaml
/// </summary>
public partial class ListViewer : UserControl
{
public static readonly DependencyProperty ListProperty = DependencyProperty.Register(
"List", typeof (IList<object>), typeof (ListViewer), new PropertyMetadata(null));
public List<object> List
{
get { return (List<object>) GetValue(ListProperty); }
set { SetValue(ListProperty, value); }
}
public ListViewer()
{
InitializeComponent();
}
}
}
这是我的控件的外观:
http://i.stack.imgur.com/JIjHy.jpg
问题是我不知道如何将项目的文本绑定到列表的元素。谢谢!
首先要做的是在 UserControl
中为 Text
属性 创建一个 DependencyProperty
。您应该在 UserControl
:
中将数据绑定到此 属性
<TextBlock Text="{Binding Text, RelativeSource={RelativeSource
AncestorType={x:Type dop:DeletableObjectPresenter}}}" />
现在您可以从 ItemsControl.ItemTemplate
:
数据绑定到 UserControl
的 Text
属性
<ItemsControl.ItemTemplate>
<DataTemplate>
<dop:DeletableObjectPresenter Text="{Binding PropertyToBindToText}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
当然,您 List
集合中的对象需要有一个 属性(在此示例中命名为 PropertyToBindToText
)以将数据绑定到 Text
属性 你的 UserControl
。因此,您最好创建一个强类型集合而不是 List<object>
,而且,在 WPF 中习惯使用 ObservableCollection<T>
。
有关详细信息,请参阅 MSDN 上的 Data Binding Overview 页面。
我有麻烦了。我创建了如下所示的 UserControl:
http://i.stack.imgur.com/ITxkS.jpg
我有依赖项 属性 "Text" 绑定到 UserControl 的 TextBlock.Text。我想创建另一个可视化列表的 UserControl。这是我的代码:
<UserControl x:Class="ListPresenter.ListViewer"
xmlns:dop="clr-namespace:DeletableObjectPresenter;assembly=DeletableObjectPresenter"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<ItemsControl ItemsSource="{Binding List, RelativeSource={RelativeSource AncestorType=UserControl}}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel></WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<ItemContainerTemplate>
<dop:DeletableObjectPresenter></dop:DeletableObjectPresenter>
</ItemContainerTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
...
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
namespace ListPresenter
{
/// <summary>
/// Interaction logic for ListViewer.xaml
/// </summary>
public partial class ListViewer : UserControl
{
public static readonly DependencyProperty ListProperty = DependencyProperty.Register(
"List", typeof (IList<object>), typeof (ListViewer), new PropertyMetadata(null));
public List<object> List
{
get { return (List<object>) GetValue(ListProperty); }
set { SetValue(ListProperty, value); }
}
public ListViewer()
{
InitializeComponent();
}
}
}
这是我的控件的外观:
http://i.stack.imgur.com/JIjHy.jpg
问题是我不知道如何将项目的文本绑定到列表的元素。谢谢!
首先要做的是在 UserControl
中为 Text
属性 创建一个 DependencyProperty
。您应该在 UserControl
:
<TextBlock Text="{Binding Text, RelativeSource={RelativeSource
AncestorType={x:Type dop:DeletableObjectPresenter}}}" />
现在您可以从 ItemsControl.ItemTemplate
:
UserControl
的 Text
属性
<ItemsControl.ItemTemplate>
<DataTemplate>
<dop:DeletableObjectPresenter Text="{Binding PropertyToBindToText}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
当然,您 List
集合中的对象需要有一个 属性(在此示例中命名为 PropertyToBindToText
)以将数据绑定到 Text
属性 你的 UserControl
。因此,您最好创建一个强类型集合而不是 List<object>
,而且,在 WPF 中习惯使用 ObservableCollection<T>
。
有关详细信息,请参阅 MSDN 上的 Data Binding Overview 页面。