如何使用绑定设置DataContext?

时间:2013-07-19 18:09:31

标签: wpf windows

我有一个像这样设置的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),但其中没有任何内容。那是为什么?

2 个答案:

答案 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}"/>