使用工具提示 WPF 在数据网格中填充组合框
Posted
技术标签:
【中文标题】使用工具提示 WPF 在数据网格中填充组合框【英文标题】:Populating combobox in datagrid with tooltips WPF 【发布时间】:2021-06-16 01:42:20 【问题描述】:目前我正在尝试使用自定义数据结构填充组合框下拉列表,该数据结构包含项目值和用于描述项目的相关工具提示。
只要列表被填充,列表的填充和工具提示都可以正常工作,但是无论何时选择一个项目,绑定都会引用对象而不是对象中的状态值。
我尝试更改组合框的 relativesource 属性,因为我知道它为什么引用对象而不是值(因为组合框的子项能够直接访问值),但我不知道如何修复问题。
简单地说,我试图从 mainwindow.xaml.cs 中的列表填充组合框的下拉值,然后从绑定中获取这些值并将它们重新绑定到 ticketinfo 中的值。
我用来测试的代码如下。
MainWindow.xaml
<DataGrid x:Name="dgData" AutoGenerateColumns="False" Height="200" HorizontalAlignment="Left" VerticalAlignment="Top">
<DataGrid.Columns>
<DataGridTextColumn Binding="Binding Subject" Header="Subject" Width="*"/>
<DataGridTemplateColumn Header="Status" Width="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="Binding Status"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox Height="22"
IsEditable="True"
ItemsSource="StaticResource StatusList"
SelectedItem="Binding Status"
IsTextSearchEnabled="True">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="Binding Status" ToolTip="Binding ToolTip" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Binding="Binding RaisedBy,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged" Header="Raised By" Width="100"/>
</DataGrid.Columns>
</DataGrid>
MainWindow.xaml.cs
public class TicketInfo
public string Subject get; set;
public string Status get; set;
public string RaisedBy get; set;
//Handle Dropdown boxes
public class StatusList : List<StatusCombo>
public StatusList()
this.Add(new StatusCombo("Test", "Test 2"));
this.Add(new StatusCombo("Check", "Check 2"));
this.Add(new StatusCombo("Fail", "Fail 2"));
public class StatusCombo
public string Status get; set;
public string ToolTip get; set;
public StatusCombo(string s, string t)
Status = s;
ToolTip = t;
编辑:为了澄清这里的情况,它并不像直接绑定到 TicketInfo 中的 Status 变量那么简单。每当使用这样的实现时,它都会显示 StatusCombo 的 namespace.classname。
【问题讨论】:
【参考方案1】:要将所选组合框项的Status
值绑定到TicketInfo
的Status
值,您可以使用提供的SelectedValuePath
绑定到SelectedValue
。所以在你的情况下,组合框可以定义为
<ComboBox Height="22"
IsEditable="True"
ItemsSource="StaticResource StatusList"
SelectedValue="Binding Status" SelectedValuePath="Status"
IsTextSearchEnabled="True">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="Binding Status" ToolTip="Binding ToolTip" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
【讨论】:
以上是关于使用工具提示 WPF 在数据网格中填充组合框的主要内容,如果未能解决你的问题,请参考以下文章
读取自定义Datagrid的每个单元格数据 - WPF C#