【问题标题】:WPF datagrid - Update property after combo item selectedWPF datagrid - 选择组合项后更新属性
【发布时间】:2013-11-20 21:04:37
【问题描述】:

我是 WPF 新手,我对数据网格上的组合框遇到的问题有疑问。当从组合中选择一个项目时,绑定属性不会像我预期的那样更新。

由于我无法发布图片(这是我第一次发布到 SO),我将尝试解释一下。如果我从组合列表中选择“D00120”,组合将反映更改,但网格属性不会更改。

Xaml:

<DataGridTemplateColumn Header="CPT Code" Width="75">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox ItemsSource="{Binding PartBCombo, 
                                    RelativeSource={RelativeSource AncestorType=Window}}" 
                                    DisplayMemberPath="PartBLookup_CPTCode" 
                                    SelectedValuePath="PartBLookup_ProcedureDescription"  
                                    SelectedValue="{Binding PartBBilling_ProcedureName, UpdateSourceTrigger=PropertyChanged}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

组合项目的属性:

    Partial Public Class PartBBilling_Combobox

    Private _PartBLookup_CPTCode As String
    Public Property PartBLookup_CPTCode As String
        Get
            Return _PartBLookup_CPTCode
        End Get
        Set(value As String)
            _PartBLookup_CPTCode = value
        End Set
    End Property

    Private _PartBLookup_ProcedureDescription As String
    Public Property PartBLookup_ProcedureDescription As String
        Get
            Return _PartBLookup_ProcedureDescription
        End Get
        Set(value As String)
            _PartBLookup_ProcedureDescription = value
        End Set
    End Property

End Class

数据网格的属性:

    Private _PartBBilling_CPT As String
    Public Property PartBBilling_CPT As String
        Get
            Return _PartBBilling_CPT
        End Get
        Set(value As String)
            _PartBBilling_CPT = value
            RaisePropertyChanged("PartBBilling_CPT")
        End Set
    End Property

    Private _PartBBilling_ProcedureName As String
    Public Property PartBBilling_ProcedureName As String
        Get
            Return _PartBBilling_ProcedureName
        End Get
        Set(value As String)
            If _PartBBilling_ProcedureName <> value Then
                _PartBBilling_ProcedureName = value
                RaisePropertyChanged("PartBBilling_ProcedureName")
            End If
        End Set
    End Property

选择项目后,UI 会正确显示,但网格属性不会更新。除此之外,组合框功能还不错。

感谢您的任何帮助或建议。

【问题讨论】:

    标签: wpf datagrid combobox


    【解决方案1】:

    首先我认为为您的 SelectedValuePath 使用独特的东西(用于识别正确的选择)

    DisplayMemberPath="PartBLookup_CPTCode" 
    SelectedValuePath="PartBLookup_CPTCode"
    

    还要小心并注意,您的 SelectedValue 将绑定到 PartBCombo 集合中的值之一,无论该类型可能是什么。因此,您将 SelectedValue 绑定到的属性应该属于该类型。

    【讨论】:

    • 感谢您的回复。如果我反转它们,那么程序名称会显示在组合中而不是 CPT 代码中(只是尝试一下,以防我遗漏了什么)。我希望显示 CPTcode,并且程序名称显示在组合右侧的文本框中。由于我是新手,所以我无法发布图片,所以这是我可以解释它的最佳方式。当从组合中选择项目时,必须更新组合绑定的属性。但我不知道该怎么做。
    • 为了使选择正常工作,您需要指定一些独特的东西,例如 CTPCode 作为您的 SelectedValuePath
    • 如果这样做,我将失去在相邻文本框中显示过程名称的功能。我希望我可以发布一张图片来更好地解释情况,但我需要至少 10 的声誉才能发布一张图片。组合功能按需要工作。它只是让 datagrid 类中的属性正确更新。否则,组合中的原始选定项目将被写回数据库,而不是新选定的项目。
    • 这篇文章解释了我的问题:stackoverflow.com/questions/18061176/… 我不认为它的回答令操作人员满意,但它与我的问题相似。
    猜你喜欢
    • 1970-01-01
    • 2018-06-24
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    相关资源
    最近更新 更多