使用工具提示 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 值绑定到TicketInfoStatus 值,您可以使用提供的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#

在 WPF 数据网格、组合框模板列上单击编辑

我需要简单的例子来在数据网格中使用组合框(MVV

将组合框添加到链接到数据表的数据网格

为啥 WPF 样式在工具提示中显示验证错误适用于文本框但对组合框无效?

在wpf中访问数据网格内的组合框属性