2013-07-19 126 views
1

我有一個DockPanel中設置了這樣如何使用綁定來設置DataContext?

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

的DockPanel中內部有一個文本框,這樣

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

這是我如何設置HonapokList,所以它基本上是一個列表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),但是沒有任何內容。這是爲什麼?

回答

2

Window沒有默認DataContext,但它看起來像你認爲它被設置爲自己。你可以將其設置爲做到這一點無論是在構造函數中:

DataContext = this; 

或XAML:

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

你也將需要改變HonapokList是一個屬性,而不是一個字段作爲現在是爲了與之結合。

+0

謝謝你的回答。 – Wtf1sh

+0

這個c sharp代碼在XAML中等於什麼? MyStackPanel.DataContext = MyProperty; – Wtf1sh

+0

它取決於你在哪裏調用它,以及你在XAML中使用了什麼DataContexts,但類似於:

1

首先,您只能與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> 

OR

你的窗口上設置DataContext

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

and th你可以這樣做 -

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

這對我也有幫助,謝謝! – Wtf1sh

相關問題