2013-07-30 50 views
0

我需要一些幫助!數據綁定字典<string,int>到依賴屬性

我有建立一個自定義控制和引用加到它類型的DependencyProperty

Dictionary<string,int> 

並從那裏控制被保持在XAML我做數據綁定到綁定到詞典的控制之外。

這裏有一些代碼片段:誰持有自定義控件控制的 視圖模型

private Dictionary<string, int> _wordsList; 

public Dictionary<string, int> WordsList 
{ 
    get 
    { 
     return _wordsList; 
    } 
    set 
    { 
     _wordsList = value; 
     RaisePropertyChanged("WordsList"); 
    } 
} 

public WordsViewModel() 
{ 
    //CalculateWordsDictionary returns a dictionary<string,int> 
    WordsList = CalculateWordsDictionary(texts); 
} 

XAML:

自定義控件的背後
<local:MyControl WordsList="{Binding Path=WordsList}" /> 

代碼:

public Dictionary<string, int> WordsList 
{ 
    get { return (Dictionary<string, int>)GetValue(WordsListProperty); } 
    set { SetValue(WordsListProperty, value); } 
} 

// Using a DependencyProperty as the backing store for WordsList. This enables animation, styling, binding, etc... 
public static readonly DependencyProperty WordsListProperty = 
    DependencyProperty.Register("WordsList", typeof(Dictionary<string, int>), typeof(MyControl), new PropertyMetadata(new Dictionary<string, int>())); 

我在DependencyProperty的集合上設置了一個斷點從來沒有達到這一點。

我只是不知道爲什麼這不起作用......或者也許有其他方式將字典傳遞給控件?

BTW 我使用MVVM光

+0

你可以添加的PropertyChanged回調的DependencyProperty和檢查,公共靜態的DependencyProperty FirstProperty = DependencyProperty.Register( 「第一」, typeof運算(字符串), typeof運算(的MyType), 新FrameworkPropertyMetadata( false, new PropertyChangedCallback(OnFirstPropertyChanged))); private static void OnFirstPropertyChanged( DependencyObject sender,DependencyPropertyChangedEventArgs e) PropertyChangedEventHandler h = PropertyChanged; (發送方,新的PropertyChangedEventArgs(「Second」)); } } – Sivakumar

+0

如果我理解正確,我應該嘗試在控件背後的代碼中捕獲屬性已更改的事件...我試圖這樣做:(http:// stackoverflow。com/questions/12798909/how-to-catch-a-property-changed-event-after-binding)沒有運氣 –

+0

那麼它應該是你的綁定問題。定義轉換器並在轉換器中放置斷點,並確保您的綁定沒有任何問題。您也可以檢查輸出窗口是否存在綁定錯誤 – Sivakumar

回答

1

你沒有張貼:)什麼是您的用戶控件內結合重要的東西?你必須使用某種「本地綁定」,以便你的MyControl綁定到它的依賴屬性。您可以使用綁定的ElementName像這樣:

編輯:這裏是

<MyControl x:Name=uc> 
    <ContentControl Content="{Binding ElementName=uc, Path=WordsList}"/> 
+0

我發佈的實際定義是自定義控件位於用戶控件的xaml中。「local」只是自定義控件的名稱空間,因此我可以通過xaml訪問它。我現在更改了名稱,以便它更清晰:

+0

您不瞭解我,重要的代碼是您的usercontrol的xaml定義。這是我的代碼片段。並且因爲我不知道Wordslist在您的用戶控件中綁定的位置,所以我將它綁定到ContentControl。你綁定到你的用戶控件是正確的,但那不是問題。至少你可以告訴我們你想用你的依賴屬性實現什麼 – blindmeis

+0

我有一個用戶控件,它在xaml中保存了一個自定義控件。我想構建一個自定義標籤雲控件,通過依賴項屬性獲取Dictionary (該單詞及其出現次數)。所以我真的不明白喲建議解決這個問題。 –

0

定名爲MyControl的用戶控件的代碼(只是一個片段)!!!!!

所有評論一起在那裏被一個DataContext定義我的問題

,我徹底刪除它。我還註冊了房產改變回調

作爲魅力!

感謝所有

+0

隨時在這裏發佈你的糟糕和好的代碼 – blindmeis