首页 > 解决方案 > WPF ComboBox 将文本绑定到所选项目

问题描述

我尝试将 a 绑定ComboBox到一个集合:

<ComboBox  Margin="4 0 2 0"
    ItemsSource="{Binding YAxes}"
    SelectedItem="{Binding SelectedYAxis, Mode=TwoWay}"
    DisplayMemberPath="AxisTitle"
    SelectedValuePath="AxisTitle"/>

一切都很好,除了Text这个ComboBox。在选择项目时,设置器SelectedYAxis触发并通知,该属性已更改:

private IAxis _selectedYAxis;
    public IAxis SelectedYAxis
    {
        get => _selectedYAxis;
        set
        {
            _selectedYAxis = value;
            OnPropertyChanged(nameof(SelectedYAxis));
        }
    }

但上的文字ComboBox永远不会更改为所选项目AxisTitle。如何将 of 显示为AxisTitleofSelectedItem的文本ComboBox

UPD:文本永远不会显示,即使它是明确设置的:

<ComboBox  Margin="4 0 2 0"
    ItemsSource="{Binding XAxes}"
    SelectedItem="{Binding SelectedXAxis, Mode=TwoWay}"
    DisplayMemberPath="AxisTitle"
    Text="Asdasd"/>

它不会将文本设置ComboBox为“Asdasd”。

UPD 2:我已经改变了使用 DataTemplate 的东西,但这并不奏效:

<ComboBox  Margin="4 0 2 0"
           ItemsSource="{Binding YAxes}"
           SelectedItem="{Binding SelectedYAxis, Mode=TwoWay}"
           ItemTemplate="{StaticResource AxisCBTextTemplate}"/>

以及上面的资源部分:

<DataTemplate x:Key="AxisCBTextTemplate">
    <TextBlock Text="{Binding AxisTitle}"/>
</DataTemplate>

UPD 3 说明我的意思:

组合框文本永远不会更新

显示一些选定文本的任务应该是微不足道的,但它有困难。

标签: c#wpf

解决方案


我找到了这个问题的根本原因。每个IAxis(它是一个SciChart轴对象)来自XAxes并且YAxes已经显示在图上(即绑定)。将它们绑定到其他控件(如 ListBox)会导致异常:“在附加到新的父 Visual 之前,必须断开指定子与当前父 Visual 的连接。”,我在尝试将它们绑定到 ListBox 时发现了它。

似乎 ComboBox 捕获了此类异常,并且在任何情况下都不输出 StackTrace。在我的情况下,这个异常被包装NullReferenceException并仅在单击没有ItemTemplate设置的组合框时发生。尽管我在细节上可能并不完全正确,但是用字符串集合替换XAxesYAxes解决了这个问题。


推荐阅读