我很難過。我有一個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代碼中可以看到,轉換器被添加到兩個綁定中。當我將轉換器取出時,組合框不再適當地填充。
備註:ItemsSource是'SelectedModel.Fields'。 SelectedItem是'SelectedField'。不應該這也是'SelectedModel.SelectedField'? – Blacktempel