c# - 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 显示为AxisTitle
ofSelectedItem
的文本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 说明我的意思:
显示一些选定文本的任务应该是微不足道的,但它有困难。
解决方案
我找到了这个问题的根本原因。每个IAxis
(它是一个SciChart轴对象)来自XAxes
并且YAxes
已经显示在图上(即绑定)。将它们绑定到其他控件(如 ListBox)会导致异常:“在附加到新的父 Visual 之前,必须断开指定子与当前父 Visual 的连接。”,我在尝试将它们绑定到 ListBox 时发现了它。
似乎 ComboBox 捕获了此类异常,并且在任何情况下都不输出 StackTrace。在我的情况下,这个异常被包装NullReferenceException
并仅在单击没有ItemTemplate
设置的组合框时发生。尽管我在细节上可能并不完全正确,但是用字符串集合替换XAxes
和YAxes
解决了这个问题。
推荐阅读
- powershell - powershell 斐波那契数列提前停止
- angular - 以角度执行父函数的无效元素
- sql-server - 不使用数据驱动订阅不发送没有数据的电子邮件
- java - 从子对象设置父变量并由其他子对象使用
- php - 在 PHP Trait Laravel 5.5 中使用从父类导入的类
- python - python - 用星号替换列中的前五个字符
- php - 没有准备好的语句和代码注入的 PDO
- gdb - QNX gdb 服务器调试应用程序
- python - 带有 Python 后端的 Web 应用程序。我应该使用 AWS Lambda 吗?
- cocoa - NSTableView - 使用 NSSortDescriptor 对集合进行排序的更好解决方案