2011-11-18 57 views
1
<Combobox ItemsSource="{Binding Path=Delimiters}" DisplayMemberPath="Key" 
SelectedValue="{Binding Path=SelectedDelimiter, UpdateSourceTrigger=PropertyChanged}" /> 

這是我的組合框在XAML與字典對象綁定組合框,但後面未生效

這裏實例化與填充在構造字典視圖模型對應的綁定在代碼中設置選定值。

private IDictionary<string,string> _delimiters; 

public IDictionary<string,string> Delimiters 
{ 
    get{return _delimiters;} 
    set{_delimiters = value; RaisePropertyChanged("Delimiters");} 
} 

private KeyValuePair <string, string> _selectedDelimiter; 
public KeyValuePair <string, string> SelectedDelimiter 
{ 
    get{return _selectedDelimiter;} 
    set{ 
     if(value.Key != _selectedDelimiter.Key || value.Value != _selectedDelimiter.Value) 
     { 
      var prevDelimiter = _selectedDelimiter; 
      _selectedDelimiter = value; 
      if(IllegalDelimiter.Contains(_selectedDelimiter) 
      { 
       MessageBox.Show("errror", "error"); 
       _selectedDelmiter = prevDelimiter; 
      } 
      RaisePropertyChanged("SelectedDelimiter"); 
     } 

    } 
} 

基本上我遇到了綁定選定值的麻煩。字典越來越受限制,當我改變了UI組合框時,設置被正確地觸發。在if語句來檢查,如果其非法的分隔符,但它在代碼中設置選定的值返回到其原始值背後,卻是不填充到ComboBox UI(我看到get訪問從UI射擊)。它的設置selectedvalue並不真正對UI做任何事情。

,如果有人可以點我在正確的方向?

回答

1

一段時間以後才弄清楚,我是正確設置的東西,但因爲我是在更新的setter相同的屬性,我需要使用調度程序來創建一個新的線程來正確地做了更新。

+0

我面臨着類似的東西..如果你還記得你可以讓我知道你所說的「更新相同的屬性在二傳手」是什麼意思? – Tany

3

如果您打算使用SelectedValue,推測是Value,您應該設置SelectedValuePathSelectedValue正在做一個「選擇」,所以你的財產類型也應該不同。

如果要保留整個KeyValuePair你應該綁定SelectedItem代替。

+0

我曾經有過'SelectValuePath = Value'和我SelectedDelimiter作爲一個字符,但它會導致相同的行爲,當我試圖去改變它.. 我也試圖與KVP到的SelectedItem結合,與不用找了。 – Tim

+0

@Tim:你是否真的在代碼中設置了屬性?如果您設置了該字段,綁定永遠不會更新,因爲不會引發通知。 –