2012-11-29 92 views
0

我可以從這裏找到同樣的問題。我嘗試了所有的方法。但他們都沒有解決我的問題。所以請不要將其標記爲重複。將字符串觀察者集合綁定到組合框

這就是我想要做的。我有一個字符串列表,我想將列表項綁定到組合框。

可以請任何人幫我找到我在這裏做錯了什麼。

XAML

<ComboBox Name="comboBox1" ItemsSource="{Binding AvailableTypes}" DataContext="{Binding AvailableTypes}"/> 

cs文件

ObservableCollection<string> availableTypes = new ObservableCollection<string>(); 

    public ObservableCollection<string> AvailableTypes { get { return availableTypes ; } } 

    public Window1() 
    {    
     InitializeComponent(); 
     availablePayTypes.Add("Type1"); 
     availablePayTypes.Add("Type1");   
    } 

數據不會綁定到ComboBox。如果我這樣做,它的工作。

comboBox1.ItemsSource=AvailableTypes; 

我的代碼有什麼問題。請幫幫我。

謝謝。

回答

1

DataContext和ItemsSource綁定的組合不正確。

這將工作:

<ComboBox Name="comboBox1" ItemsSource="{Binding AvailableTypes}" /> 

而且在構造函數:

public Window1() 
{    
    InitializeComponent(); 
    DataContext = this; // <-- 
    availablePayTypes.Add("Type1"); 
    availablePayTypes.Add("Type1");   
} 

這到底是怎麼回事?

  1. 你綁定到AvailablePayTypes而收集名爲AvailableTypes
  2. 您正在將DataContext綁定到AvailablePayTypes。但是這不起作用,因爲你的Window本身沒有設置DataContext,所以WPF不知道在哪裏尋找AvailablePayTypes
  3. 您正在將ItemsSource綁定到AvailablePayTypes。即使前面的DataContext綁定可以工作,WPF現在也會在集合AvailablePayTypes上尋找一個名爲AvailablePayTypes的屬性。這顯然是錯誤的。

我做了如下修改代碼:

  1. 固定錯字
  2. 刪除ComboBox的的DataContext的,綁定以便它能夠從窗口
  3. 繼承在構造函數中的窗口,我設置DataContext自己。
+0

謝謝您的支持。其實在我的代碼上有複製和粘貼錯誤。無論如何謝謝你的指導。 –

2

至少有兩件事是錯誤的。首先,您有一個錯字 - ItemsSource="{Binding AvailablePayTypes}"應該是AvailableTypes以匹配屬性名稱。

其次,您不需要同時設置DataContextItemsSource。通常情況下,您需要將XAML根的DataContext設置爲代碼隱藏類,然後使用ItemsSource="{Binding AvailableTypes}"

請注意,您可以設置的DataContext無論是從後臺代碼:

public Window1() 
{    
    InitializeComponent(); 
    availablePayTypes.Add("Type1"); 
    availablePayTypes.Add("Type1");   
    LayoutRoot.DataContext = this; 
} 

還是從XAML本身使用RelativeSource

<UserControl 
    DataContext="{Binding RelativeSource={RelativeSource Self}}" /> 
+0

感謝您的支持。其實我的代碼有複製和粘貼錯誤。 –