2011-07-12 203 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}" />