WPF、MVVM数据网格行绑定

本文关键字:网格 绑定 数据网 数据 MVVM WPF | 更新日期: 2023-09-27 18:01:44

我在徘徊,如果有人可以帮助我解决我所拥有的绑定问题?

<DataGrid AutoGenerateColumns="False" Grid.Column="1" Grid.Row="1" SelectionMode="Single" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding PersonList}" CanUserSortColumns="True" SelectedItem="{Binding Path=SelectedPerson}" >
            <DataGrid.Columns>
                <DataGridTextColumn Header="FirstName" Width="100" Binding="{Binding FirstName}" />
                <DataGridTextColumn Header="LastName" Width="100" Binding="{Binding LastName}" />
                <DataGridTemplateColumn Width="140" Header="Operator">
                    <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                        <ComboBox ItemsSource="{Binding Path=OperatorList}" DisplayMemberPath="FullName" SelectedValue="{Binding Path=SelectedOperator}" />
                            </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn> 
                ...
</DataGrid>
上面是来自视图的代码片段:

列表中的每个人都有自己的视图模型,其代码片段如下:

CollectionView _operatorList;
public CollectionView DebtorAgentList { get { return _operatorList; } }
Model.Operator _selectedOperator;
public Model.Operator SelectedOperator
{...}

现在的问题是,我有SelectedValue绑定不工作,我不能找出为什么?但让它变得棘手或不同的是(可能)数据网格中的每一行都有自己的视图模型,换句话说就是视图模型的数据网格。FirstName LastName和Combobox都填对了但SelectedValue无法绑定?注:这不是因为拼写错误,如果有拼写错误,是因为我在写问题时重命名了方法等。

更多细节:

上面的数据网格是视图的一部分,它有自己的视图模型,这个视图模型用一个人的列表填充上面的数据网格,每个人本质上是一个视图模型(它不是一个真正的视图模型,但它更像是一个视图模型,而不是一个平面模型)。它的工作方式,我需要它直到我尝试绑定SelectedView属性?

谁能告诉我为什么绑定可能不工作?

谢谢提前:D

WPF、MVVM数据网格行绑定

先使用SelectedValuePath,然后使用'SelectedValue'选择集合中的任何项,参见以下代码:-

<ComboBox ItemsSource="{Binding Path=OperatorList}" DisplayMemberPath="FullName" SelectedValuePath="SelectedOperator" SelectedValue="{Binding SelectedOperator}" />   

我找到了一篇帮助我解决这个问题的文章。我没有使用模板列,而是使用DataGridComboBoxColumn,如下所示:

<DataGrid AutoGenerateColumns="False" Grid.Column="1" Grid.Row="1" SelectionMode="Single" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding PersonList}" CanUserSortColumns="True" SelectedItem="{Binding Path=SelectedPerson}" >
        <DataGrid.Columns>
            <DataGridTextColumn Header="FirstName" Width="100" Binding="{Binding FirstName}" />
            <DataGridTextColumn Header="LastName" Width="100" Binding="{Binding LastName}" />
            <DataGridComboBoxColumn Header="Operator" DisplayMemberPath="FullName" Width="150" SelectedValueBinding="{Binding Path=SelectedOperator}" >
                <DataGridComboBoxColumn.ElementStyle>
                <Style TargetType="ComboBox">
                    <Setter Property="ItemsSource" Value="{Binding Path=OperatorList}" />
                </Style>
                </DataGridComboBoxColumn.ElementStyle>
                <DataGridComboBoxColumn.EditingElementStyle>
                    <Style TargetType="ComboBox">
                        <Setter Property="ItemsSource" Value="{Binding Path=OperatorList}" />
                    </Style>
                </DataGridComboBoxColumn.EditingElementStyle>
            </DataGridComboBoxColumn>
            ...
</DataGrid>

其余的保持不变,谢谢大家