【问题标题】:Combobox binding doesn't work unless debug converter is used in Xaml除非在 Xaml 中使用调试转换器,否则组合框绑定不起作用
【发布时间】: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吗?

标签: c# wpf xaml mvvm combobox


【解决方案1】:

您可以尝试使用项目模板来设置您希望数据的显示方式, 此外,如果组合框不知道如何处理数据,则需要一个转换器。只使用一个空的转换器会不会很痛苦?

【讨论】:

  • 组合框实际上是在一个项目模板中,但是我想使用空转换器并没有什么坏处。仍然很奇怪它的工作原理(至少对我而言)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多