データ グリッドからアイテムを選択しているときにモーダル ウィンドウを開いているため、データ グリッドからアイテムが選択されたことを通知しようとしています。モーダル ウィンドウで選択したアイテムを編集していますが、選択したアイテムを変更しようとすると別のモーダル ウィンドウが開くため、選択したアイテムの RaisedPropertychanged メカニズムを使用したくありません。現在、イベント トリガーを使用してこの問題を修正しようとしていますが、エラーが発生しています。以下は関連するコードです:
ビューモデル:
public ObservableCollection<Student> sItems {
get {
return ssitems;
}
set {
ssitems = value;
RaisePropertyChanged( "sItems" );
}
}
private StudentsInformation studentInformation;
public StudentsInformation studentInformationObject {
get {
return studentInformation;
}
set {
studentInformation = value;
RaisePropertyChanged( "studentInformationObject" );
}
}
public RelayCommand<Student> SelectionChangedCommand {
get;
set;
}
これらのコード行はコンストラクターにあります。
SelectionChangedCommand = new RelayCommand<Student>(
item => {
if( item != null ) {
MessengerInstance.Send<Student>( item, "SelectedStudent" );
}
} );
これは、datagarid で結合されたコレクションです。
意見:
<DataGrid x:Name="dataGrid" Grid.Row="1" Margin="5"
IsReadOnly="False" ColumnHeaderHeight="30"
ItemsSource="{Binding Path=sItems}" AutoGenerateColumns="False"
SelectedItem="{Binding Path=SelectedStudentObject, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<DataGrid.Columns>
<!--<DataGridCheckBoxColumn Header="Select" Binding="{Binding Path=myselect, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="False" />-->
<DataGridTextColumn Header="Name" Binding="{Binding name}"></DataGridTextColumn>
<DataGridTextColumn Header="Enrollment" Binding="{Binding enrollment}"></DataGridTextColumn>
<DataGridTextColumn Header="Score" Binding="{Binding score}"></DataGridTextColumn>
<DataGridTextColumn Header="Comment" Binding="{Binding comment}"></DataGridTextColumn>
</DataGrid.Columns>
<i:EventTrigger EventName="SelectionChanged">
<cmd:EventToCommand Command="{Binding SelectionChangedCommand}"
CommandParameter="{Binding SelectedItem}" />
</i:EventTrigger>
</DataGrid>
トリガーセクションを削除すると、データグリッドに目的のデータが入力されます。トリガー コードを含めると、次のエラー メッセージが表示されます。
ItemsSource を使用する前に、Items コレクションを空にする必要があります。
この種のものを修正する他の方法があることを知りたいです。MVVM Light ツールキットを使用しています。