如何设置DataContext绑定?

我有一个这样设置的DockPanel

<Window ... > <DockPanel x:Name="myDock" DataContext="{Binding HonapokList}" > 

在Dockpanel里面有一个TextBox,像这样

 <TextBox x:Name="tbCount" Text="{Binding Path=Count,Mode=OneWay}" /> </DockPanel> </Window> 

这是我如何设置HonapokList,所以它基本上是一个List String>

 public List<String> HonapokList; public MainWindow() { InitializeComponent(); HonapokList = new List<string>(); Honapok.ItemsSource = HonapokList; HonapokList.Add("January"); HonapokList.Add("February"); HonapokList.Add("March"); } 

我想我的文本框显示在HonapokList(在这个例子中是3)的元素数量,但是没有任何内容。 这是为什么?

Window没有一个默认的DataContext ,但是看起来你假设它被设置为它自己。 您可以将其设置为在构造函数中执行:

 DataContext = this; 

或者在XAML中:

 <Window DataContext="{Binding RelativeSource={RelativeSource Self}}"> 

您也需要将HonapokList更改为属性,而不是像现在这样的字段,以便与之绑定。

首先你可以绑定Properties而不是fields 。 所以,让HonapokList属性 –

 public List<String> HonapokList { get; } 

其次,改变你的xaml使用RelativeSource在你的Window类中查找属性 –

 <DockPanel x:Name="myDock"> <TextBox x:Name="tbCount" Text="{Binding Path=HonapokList.Count, Mode=OneWay, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"/> </DockPanel> 

要么

在你的窗口上设置DataContext

 <Window DataContext="{Binding RelativeSource={RelativeSource Self}}"> 

然后你可以这样做 –

 <TextBox x:Name="tbCount" Text="{Binding Path=HonapokList.Count, Mode=OneWay}"/>