2

我有一个像这样设置的 DockPanel

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

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

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

这就是我设置 HonapokList 的方式,所以它基本上是一个列表字符串>

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),但其中没有任何内容。这是为什么?

4

2 回答 2

5

Window没有默认值DataContext,但看起来你假设它被设置为自身。您可以在构造函数中将其设置为:

DataContext = this;

或在 XAML 中:

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

您还需要更改HonapokList为属性,而不是现在的字段,以便绑定到它。

于 2013-07-19T18:16:04.003 回答
1

首先,您可以绑定Propertiesonly 而不是 with fields。所以,做HonapokList一个财产 -

public List<String> HonapokList { get; }

其次,更改您的 xaml 以Window使用RelativeSource-

<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}"/>
于 2013-07-19T18:20:55.720 回答