私が抱いているバインディングの問題を解決する手助けがあれば、私は迷っていますか?コードの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
SelectedModeバインディングモードは双方向にする必要がありますか?あなたはプロパティを変更したイベントを発射していますか? –
私はselectedModeを設定しようとしましたが、何もしませんでした(デフォルトではtwowayではありません)。実際にプロパティを変更したイベントを発生させるはずです。しかし、悪い場所で強制的に試してみてください:) – Heinrich
Mode OneWay by OneWayデフォルト。あなたのコードはINotifyPropertyChangedの実装を示さなかったので、わかりませんでした。 –