2013-05-21 245 views
1

所以我有WPF綁定的問題。我想綁定一個DataGrid ComboBoxColumn與靜態資源,但沒有運氣。我知道問題出在哪裏,但我不知道如何解決。wpf綁定到靜態資源

在XAML

我有這樣的:

public class MyClasificators:List<KeyValuePair<object, object>> 
{ 
    public void _MyClasificators(DataTable country) 
    { 
     foreach (DataRow row in country.Rows) 
     { 
      this.Add(new KeyValuePair<object, object>(row.ItemArray[0], row.ItemArray[1])); 
     } 
    } 

而且傳遞DataTable中的代碼:

<local:MyClasificators x:Key="clList"></local:MyClasificators> 

和DataGridComboBoxColumn爲我綁定的源

<DataTemplate> 
    <ComboBox ItemsSource="{StaticResource clList}" DisplayMemberPath="Value" ></ComboBox> 
</DataTemplate> 

代碼:

public void callMyClassificators(DataTable country) 
{ 
    MyClasificators clasif = new MyClasificators(); 
    clasif._MyClasificators(country); 
} 

我知道最有可能我只是要編輯資源部分,但我不知道該怎麼去解決它?

回答

1
<local:MyClasificators x:Key="clList"></local:MyClasificators> 

轉化爲類似:

Resources.Add("clList", new MyClasificators()); 

就是這樣,有一個在你的對象沒有數據。

你可以從你的代碼中app.xaml.cs創建資源clList,例如:

var countryTable = ... // Get or create table here 
var clList = new MyClasificators(); 
var clList.callMyClassificators(countryTable); 
Resources.Add("clList", clList); 
+0

我知道我的對象中沒有數據。問題是我試圖修改我在這裏找到的一個例子[link] http://stackoverflow.com/questions/16622425/wpf-datagrid-combobox-binding-staticresource-list-of-keyvalue-pairs [link] –

+0

在這個例如表格是在MyClassificator的構造函數中獲取的。這就是爲什麼它在那裏工作... – Marc

+0

你能推薦我怎麼去做這件事嗎?我嘗試過但我無法以不同的方式傳遞DataTable。 –

0

從上面的代碼看來,MyClasificators的一個實例是在資源部分創建的。但MyClasificators(clList)沒有任何項目。這是一個空的列表。在代碼中放置一個斷點並檢查this.Resources [「clList」]並檢查其中的項目數量。

+0

嗯,是的,這正是問題。 –

0

我看到多個問題。

  1. 在callMyClassificators中,您創建了一個新的MyClasificators實例。該實例不是您在Xaml中綁定的實例。當你定義一個本地資源時,在那裏創建一個實例。這是你的Combox綁定的那個,而不是你在callMyClassificators中創建的那個。你應該確保xaml和代碼在同一個實例上工作。

  2. 比方說你修1號。什麼時候調用「callMyClassificators」?綁定完成後,MyClasificators無法通知WPF列表已更改。您可以使用ObservableCollection>,以便WPF自動收集更改。

+0

我已經試圖用可觀察的集合bu做失敗,這就是爲什麼我試圖使這個解決方案的工作。 –