2017-05-05 72 views
0

我很難過。我有一個ComboBox誰是ItemSource是一個自定義詞典ObservablePaircollection這是一個可觀察的字典(源代碼找到http://www.broculos.net/2014/03/wpf-editable-datagrid-and.html)。 DisplayMemberPath是字典的關鍵字,其中SelectedValuePath是所述密鑰的值。Combobox綁定不起作用,除非在Xaml中使用調試轉換器

我在配置文件中讀取,其中包含我的程序與給定鍵匹配的字符串,然後使用該匹配鍵填充組合框。問題是,組合框總是顯示爲空,除非我將Converter添加到綁定中,這只是一個簡單的調試轉換器,它允許我檢查XAML綁定。我無法弄清楚爲什麼。

這裏的轉換器:

public class DatabindingDebugConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     Debugger.Break(); 
     return value; 
    } 

    public object ConvertBack(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     Debugger.Break(); 
     return value; 
    } 
} 

這裏是我的組合框的XAML:

<ComboBox DisplayMemberPath="Key" 
      ItemsSource="{Binding SelectedModel.Fields, Mode=TwoWay, 
           UpdateSourceTrigger=PropertyChanged, Converter={StaticResource debugConverter}}" 
      SelectedItem="{Binding SelectedField, Converter={StaticResource debugConverter}}" 
      SelectedValuePath="Value" /> 

這就是的ItemSource來自於類,這就是所謂SelectedModel(我會後的類在此之後):

public class DataModel : INotifyPropertyChanged 
{ 
    private ModelBase _selectedModel; 
    public ModelBase SelectedModel 
    { 
     get { return _selectedModel; } 
     set { _selectedModel = value; OnPropertyChanged("SelectedModel"); } 
    } 

    private Pair<string, string> _selectedField; 
    public Pair<string, string> SelectedField 
    { 
     get { return _selectedField; } 
     set { _selectedField = value; OnPropertyChanged("SelectedField"); } 
    } 
} 

這裏是ModelBase類別:

public abstract class ModelBase : INotifyPropertyChanged 
{ 
    private ObservablePairCollection<string, string> _fields = new ObservablePairCollection<string, string>(); 
    public ObservablePairCollection<string, string> Fields 
    { 
     get { return _fields; } 
     set { _fields = value; OnPropertyChanged("Fields"); } 
    } 
} 

從上面的XAML代碼中可以看到,轉換器被添加到兩個綁定中。當我將轉換器取出時,組合框不再適當地填充。

+0

備註:ItemsSource是'SelectedModel.Fields'。 SelectedItem是'SelectedField'。不應該這也是'SelectedModel.SelectedField'? – Blacktempel

回答

1

您可能會嘗試使用項目模板來設置如何顯示數據, 另外,如果組合框不知道如何處理數據,則需要轉換器。只使用空轉換器會傷害嗎?

+0

該組合框實際上是在一個項目模板,但是我猜這不會傷害使用空轉換器。仍然奇怪,它的工作原理(至少對我而言)。 – pfinferno