Wpf 如何绑定UserControl类型对象的可观察集合
我在WPF中遇到了一个数据绑定问题。以下是场景 我有一个Telerik的Wpf 如何绑定UserControl类型对象的可观察集合,wpf,data-binding,user-controls,telerik,observablecollection,Wpf,Data Binding,User Controls,Telerik,Observablecollection,我在WPF中遇到了一个数据绑定问题。以下是场景 我有一个Telerik的RadTileView,它绑定到类型为MyItem的observeCollection public class MyItem : UserControl { public string Title { get; set; } public string Content { get; set; } } ObservableCollection的填充方式如下:
RadTileView
,它绑定到类型为MyItem
的observeCollection
public class MyItem : UserControl
{
public string Title { get; set; }
public string Content { get; set; }
}
ObservableCollection
的填充方式如下:
private ObservableCollection<MyItem> items_ = null;
public ObservableCollection<MyItem> TileItems
{
get
{
if (items_ == null)
{
items_ = new ObservableCollection<MyItem>();
items_.Add(new MyItem() { Title = "ABC", Content = "Test Content" });
items_.Add(new MyItem() { Title = "DEF", Content = "Test Content1" });
items_.Add(new MyItem() { Title = "GHI", Content = "Test Content2" });
}
return items_;
}
set
{
items_= value;
OnPropertyChanged("TileItems");
}
}
当我运行上面的代码时,它显示了三个空的RadTileView
,但它们是空的,如图所示
如果我将MyItem
更改为
public class MyItem
{
public string Title { get; set; }
public string Content { get; set; }
}
然后它开始按预期工作,如图所示
当我从UserControl
继承MyItem
时,我无法找出数据绑定的问题所在
编辑:
我的要求是在
RadTileView
的内容区域显示自定义用户控件,在RadTileView
的标题区域显示标题文本,如何实现?如果项目不是数据、简单明了,控件将不使用数据模板。如果类应该是数据,则不要从UserControl
继承(如果这样做,也会破坏模型-视图分离)
RadTileView
仅将项目作为一个实体进行评估,因此,如果项目作为一个整体被视为可显示,则忽略数据模板。如果必须执行此操作,请将UserControl
移动到一个属性,并在ContentTemplate
中使用该属性(其中仅包含一个ContentPresenter
将内容
绑定到包含UserControl
的属性)
如果要坚持模型-视图分离,则不应从任何UI相关类继承,并且
内容
应包含数据,然后可以使用所需的用户控件
在内容模板
中对其进行模板化 我认为您不能这样做,因为您正在绑定UIElements。因此,WPF将使用它们作为其项,而不是类属性。项实际上将包含自定义的UserControls
,我刚才在这里展示了一个示例。有什么解决方法吗?@Ummar:逻辑上不可能,您想显示您定义的UserControl
或ItemTemplate
吗?它不能两者都是,如果你有一个UIElement
,它只会按原样显示,而忽略ItemTemplate
。它将包含浏览器控件或任何其他控件,用户可以在一个新的RadTileView
中创建和加载这些控件。我希望它能澄清这个问题,仅供参考,我正在使用PRISM和MEF。@Ummar:不,它没有UserControl
vs.ItemsControl.ItemTemplate
,你还不明白吗?@Ummar:这更清楚了,答案仍然是,这不能起作用,因为项目仅由RadTileView
作为一个实体进行评估,因此如果项目作为一个整体被认为是可显示的,那么模板将被忽略。正如我所说的,无论如何都不应该让集合包含UIElements,因为这违反了模型-视图分离,如果必须这样做,请将UserControl移动到属性,并在ContentTemplate
(它只包含一个ContentPresenter
将内容绑定到包含UserControl
的属性)
public class MyItem
{
public string Title { get; set; }
public string Content { get; set; }
}