C# WPF,MVVM数据网格行绑定

C# WPF,MVVM数据网格行绑定,c#,wpf,mvvm,binding,C#,Wpf,Mvvm,Binding,我想知道是否有人能帮我解决我面临的约束问题 代码片段: <DataGrid AutoGenerateColumns="False" Grid.Column="1" Grid.Row="1" SelectionMode="Single" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding PersonList}" CanUserSortColumns="True" SelectedIt

我想知道是否有人能帮我解决我面临的约束问题

代码片段:

<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>
现在我遇到的问题是SelectedValue绑定不起作用,我不知道为什么?但让它变得棘手或不同(可能)的是,数据网格中的每一行都有自己的viewmodel,换句话说,就是viewmodels的datagrid。现在的情况是,FirstName、LastName和Combobox都正确填充了,但我似乎无法获得要绑定的SelectedValue? 另外,这不是因为拼写错误,如果有拼写错误是因为我在写问题时重命名了方法等等

进一步详情:

上面的Datagrid是具有自己的viewmodel的视图的一部分,该视图模型使用人员列表填充上面的Datagrid,每个人本质上都是一个viewmodel(其实它不是一个viewmodel,但它更像是一个viewmodel而不是一个平面模型)。在我尝试绑定SelectedView属性之前,它的工作方式与我所需的相同

有人能告诉我为什么装订不好吗


提前感谢:D

使用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>

...
其余的都没变,
谢谢大家:)

SelectedMode绑定模式需要双向吗?您正在触发属性更改事件吗?我尝试设置selectedMode,但没有任何作用(默认情况下不是双向的),是的,它应该触发属性更改事件,但我将尝试在某些位置强制它,看看会发生什么:)模式默认为单向。你的代码没有显示INotifyPropertyChanged的任何实现,所以我不确定。哦,真的,谢谢,我现在已经解决了,但是谢谢
<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>