如何将 ItemsControl.ItemsSource 与 XAML 中的属性绑定?
Posted
技术标签:
【中文标题】如何将 ItemsControl.ItemsSource 与 XAML 中的属性绑定?【英文标题】:How can I bind an ItemsControl.ItemsSource with a property in XAML? 【发布时间】:2013-05-17 15:44:36 【问题描述】:我有一个简单的窗口:
<Window x:Class="WinActivityManager"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<ListView x:Name="lvItems" />
</Grid>
</Window>
以及后面的相关代码:
public partial class WinActivityManager : Window
private ObservableCollection<Activity> Activities get; set;
public WinActivityManager()
Activities = new ObservableCollection<Activity>();
InitializeComponent();
// Other code ...
如果我在窗口构造函数中编写以下绑定:
lvItems.ItemsSource = Activities;
然后,当我从 Activities
添加或删除元素时,我的 ListView 会自动更新。
我应该如何在 XAML 中编写绑定? 我试过了,但它不起作用:
<ListView x:Name="lvItems" ItemsSource="Binding=Activities" />
如何在 XAML 中进行这项工作?
【问题讨论】:
你试过ItemsSource=Binding Activities
吗?
【参考方案1】:
@JesseJames 说的是真的,但还不够。
你必须放
private ObservableCollection<Activity> Activities get; set;
作为
public ObservableCollection<Activity> Activities get; set;
绑定应该是:
<ListView x:Name="lvItems" ItemsSource="Binding Path=Activities" />
问候,
【讨论】:
这项工作,但设置 DataContext 我认为更好的方法就像@Farhad Jabiyev 写的。【参考方案2】:您必须像其他人回答的那样将 DataContext 设置为 this,但您也可以设置 DataContext
到 xaml
:
<Window x:Class="WinActivityManager"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="Binding RelativeSource=RelativeSource Self">
<Grid>
<ListView x:Name="lvItems" ItemsSource="Binding Path=Activities" />
</Grid>
</Window>
【讨论】:
真的Binding=Activities
?你的意思是Binding Activities
或Binding Path=Activities
吗?以前没见过这个...
@Jan'splite'K。这是错字)谢谢【参考方案3】:
在 Window 构造函数中设置DataContext = this
。
public WinActivityManager()
Activities = new ObservableCollection<Activity>();
DataContext = this;
InitializeComponent();
然后就可以随意绑定Activity了:<ListView x:Name="lvItems" ItemsSource="Binding=Activities" />
【讨论】:
【参考方案4】:那是因为您的视图的数据上下文尚未设置。您可以在后面的代码中执行此操作:
this.DataContext = this;
或者,您可以将 Window 的 DataContext
设置为自身 - DataContext="Binding RelativeSource=RelativeSource Self"
尽管调查MVVM design pattern 和using an MVVM framework,你的情况会好得多。
【讨论】:
以上是关于如何将 ItemsControl.ItemsSource 与 XAML 中的属性绑定?的主要内容,如果未能解决你的问题,请参考以下文章