2011-07-12 103 views
1

私が抱いているバインディングの問題を解決する手助けがあれば、私は迷っていますか?コードのWPF、MVVM DataGrid行バインド

スニペット:

CollectionView _operatorList; 
public CollectionView DebtorAgentList { get { return _operatorList; } } 

Model.Operator _selectedOperator; 
public Model.Operator SelectedOperator 
{...} 

リストの各人は以下のコードを持って、独自のviewmodelです:

<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バインディングが機能していないことと、なぜうまくいかないのですか?しかし、それが厄介であるか異なっているのは、データグリッド内のすべての行に独自のビューモデルがあることです。つまり、ビューモデルのデータグリッドです。ですから、FirstNameとLastNameとComboboxはすべて正しく埋められていますが、SelectedValueをバインドすることはできません。 P.P.スペルミスがある場合は、私は質問など

さらに詳細を書いたとき、私はメソッドの名前を変更しているためである、なぜなら、一部のスペルミスのイマイチ:

上記データグリッドには独自のviewmodelを持つビューの一部であり、このビューモデルは上記のデータグリッドを人のリストで満たし、各人は本質的にビューモデルです(実際はビューモデルではありませんが、平面モデルよりもビューモデルのほうが多い)。 SelectedView属性をバインドしようとするまで、必要な方法で動作しますか?

誰かがそのバインディングが機能しない理由を教えてください。事前に

ありがとう:D

+0

SelectedModeバインディングモードは双方向にする必要がありますか?あなたはプロパティを変更したイベントを発射していますか? –

+0

私はselectedModeを設定しようとしましたが、何もしませんでした(デフォルトではtwowayではありません)。実際にプロパティを変更したイベントを発生させるはずです。しかし、悪い場所で強制的に試してみてください:) – Heinrich

+0

Mode OneWay by OneWayデフォルト。あなたのコードは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}" /> 
関連する問題