具有绑定值的 ComboBox 项目

ComboBox items with a binded value

在我的 WPF 页面中,我想创建一个 ComboBox,其中第一项为空,第二项与 属性 值绑定,所以我做了:

<DataGrid x:Name="grdTmplBit" ColumnWidth="*" Style="{StaticResource DataGridStyle}" EnableColumnVirtualization="True" CanUserSortColumns="true" Margin="4,3,2,7" MaxHeight="930" SelectionMode="Extended" SelectionUnit="FullRow" ItemsSource="{Binding ElementName=ObjectsTree, Path=SelectedItem.InfosView, IsAsync=True}" >
    <DataGrid.Columns>                            
        <DataGridTemplateColumn Width="110" Header="COMM" Visibility="Visibile">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox Width="90" SelectedValue="{Binding Comm.UnitName, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource workModeStyle}" SelectedValuePath="Content">
                        <ComboBoxItem Content="" />
                        <ComboBoxItem Content="{Binding Comm.UnitName}" />
                    </ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns> 
</DataGrid> 

属性 UnitNamestring。请考虑 ComboBoxDataGridTemplateColumn 内。基本上第二项总是空的,如果我将 ComboBox 更改为 TextBox,则值会正确显示。有帮助吗?

我认为您的问题是您将 SelectedValue 绑定到 Comm.UnitName,并且还将第二个 ComboBoxItem 内容绑定到此 属性。这意味着 ComboBox 将以下列方式之一运行:

  • (初始 selected 值来自 Comm.UnitName) > selected 行显示此项目> 你 select 空项目 > Comm.UnitName 将设置为空 string > 结果:两个 ComboBoxItem 都为空(一个设置为空,另一个与 Comm.UnitName 同步,现在也为空)
  • (初始 selected 值为第一项,空)> selected 行显示此项 > Comm.UnitName 将设置为空 string > 结果:同上。

为了解决这个问题,您可以考虑以下选项之一:

  • SelectedValue 创建一个专用的 属性,这样 Comm.UnitName 就不会被覆盖。

  • ComboBoxItem 中的值创建一个专用的 属性。

  • 使用OneTime模式绑定只同步初始值(这并不适用于所有情况,尤其是如果你在Comm.UnitName中保存空值,同样问题)。

    <ComboBoxItem Content="{Binding Comm.UnitName, Mode=OneTime}" />