2011-07-12 87 views
1

如果有人可以帮我解决我遇到的绑定问题,我会流浪吗?代码的WPF,MVVM datagrid行绑定

摘录:

<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绑定? P.S.它不是因为一些拼写错误,如果有拼写错误,是因为我改名的方法,当我写的问题等

更多详情:

以上的Datagrid是有它自己的视图模型视图的一部分,这个视图模型用一系列人物填充上面的数据网格,每个人本质上都是一个视图模型(好吧,它不是一个真正的视图模型,但它的视图模型又多于平面模型)。它工作的方式,我需要它,直到我试图绑定SelectedView属性?

有人可以告诉我为什么绑定可能无法正常工作?

在此先感谢:d

+0

SelectedMode绑定模式需要两种方式吗?你是否发射财产变化的事件? –

+0

我试图设置selectedMode,但没有做任何事情(默认情况下不是双向的),是的,它应该是触发属性更改事件,但我试着强迫它在地方,看看会发生什么:) – Heinrich

+0

模式是单向默认。你的代码没有显示任何INotifyPropertyChanged的实现,所以我不确定。 –

回答

0

我发现this article,帮助我解决它了:) 而不是用我所用的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> 

的休息保持不变, 谢谢大家:)

0

使用SelectedValuePath,然后使用“的SelectedValue”集合中选择任何项目,请看下面的代码: -

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