我有一个像这样设置的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&gt;
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),但其中没有任何内容。那是为什么?
答案 0 :(得分:3)
Window
没有默认DataContext
,但看起来你假设它被设置为自己。您可以将其设置为在构造函数中执行此操作:
DataContext = this;
或在XAML中:
<Window DataContext="{Binding RelativeSource={RelativeSource Self}}">
您还需要将HonapokList
更改为属性,而不是现在的字段,以便绑定到它。
答案 1 :(得分:1)
首先,您只能与Properties
绑定,而不能与fields
绑定。因此,将HonapokList
设为属性 -
public List<String> HonapokList { get; }
其次,使用Window
更改您的xaml以在RelativeSource
课程中查找该媒体资源 -
<DockPanel x:Name="myDock">
<TextBox x:Name="tbCount"
Text="{Binding Path=HonapokList.Count, Mode=OneWay,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=Window}}"/>
</DockPanel>
OR
在您的窗口设置DataContext
<Window DataContext="{Binding RelativeSource={RelativeSource Self}}">
然后你可以这样做 -
<TextBox x:Name="tbCount"
Text="{Binding Path=HonapokList.Count, Mode=OneWay}"/>