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>