【发布时间】:2017-05-05 13:40:45
【问题描述】:
我被难住了。我有一个ComboBox,他的ItemSource 是一个名为ObservablePaircollection 的自定义字典,它只是一个可观察字典(源代码找到http://www.broculos.net/2014/03/wpf-editable-datagrid-and.html)。 DisplayMemberPath 是字典的键,SelectedValuePath 是该键的值。
我正在读取一个配置文件,其中包含我的程序与给定键匹配的字符串,然后使用该匹配键填充组合框。问题是,组合框总是显示为空,除非我将转换器添加到绑定中,这只是一个简单的调试转换器,可以让我检查 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吗?