wpf (.Net 4.5) DataGrid가 있습니다. MVVM-Light 프레임 워크를 사용하여 응용 프로그램에 MVVM 패턴을 사용하고 있습니다.wpf DataGrid의 SelectedeRow 값에 대한 GUI 업데이트
TrackingCollection이라는 "추적"개체의 관찰 가능한 컬렉션에 바인딩 된 DataGrid가 있습니다. DataGrid selectedItem은 viewModel의 "SelectedTracking"속성에 바인딩됩니다.
<DataGrid Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" MinHeight="300"
ItemsSource="{Binding TrackingCollection}"
CanUserAddRows="False" CanUserDeleteRows="False"
SelectionMode="Single" SelectedItem="{Binding SelectedTracking, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
RowDetailsTemplate="{StaticResource FTC_TrackingFullDetailTemplate}">
</DataGrid>
하나의 열에 SelectedTracking 개체의 "idAction"속성에 바인딩 된 comboBox가 있습니다. 사용자가이 comboBox의 선택을 변경하면 두 개의 다른 콤보 상자 값을 DataGrid의 다른 두 열에 할당하려고합니다. 이러한 다른 열은 뷰 모델의 속성에 바인딩되지 않고 SelectedTracking 객체의 속성에 직접 바인딩됩니다. SelectedTracking 개체의 이러한 속성은 iSource_Type 및 iDestination_Type입니다. I이 (iSource_Type, iDestination_Type) (제 '액션'으로 comboBox에 따라 selectionChanged 함수 ) 뷰 모델 코드에있는 값을 할당 그래서
<DataGridTemplateColumn Header="SOURCE" SortMemberPath="tracking_source.chrSource" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Style="{StaticResource FTC_DetailComboBox}" Margin="0" Padding="3"
ItemsSource="{Binding DataContext.TrackingSources, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
SelectedValuePath="idSource"
DisplayMemberPath="chrSource"
SelectedValue="{Binding iSource_Type, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}">
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
: 여기
는 iSourceType 대한 열 정의다 값은 객체 자체에서 업데이트됩니다. 그러나 변경 사항은 이러한 속성에 바인딩 된 UI의 콤보 상자에 반영되지 않습니다. 내가 뭘하려:
첫째 :
나는 RaisePropertyChanged라는 기능에서 INotifyPropertyChanged를 구현해야합니다. 이것은 MVVM_Light 프레임 워크를 통해 제공됩니다. 그래서 나는 다음을 사용하려고 시도했다.
RaisePropertyChanged("iDestination_Type")
RaisePropertyChanged("iSource_Type")
RaisePropertyChanged("SelectedTracking")
RaisePropertyChanged("SelectedTracking.iDestination_Type")
RaisePropertyChanged("SelectedTracking.iSource_Type")
그러나 이것들은 작동하지 않는다.
둘째 :
나는 또한 SelectedTracking 객체에 바인드 뷰 모델의 속성을 만들려고. 그러나 이것으로 모든 추적 객체가 동일한 값을 갖게되었습니다.
질문 : 는 뷰 모델의 일부가 아니지만 뷰 모델에있는 객체의 속성입니다 속성에 대한 작업을에서 INotifyPropertyChanged 수 있습니다. 그렇다면 INotifyPropertyChanged 이벤트에서 어떤 구문을 사용해야합니까?
추가 정보 : 에서 INotifyPropertyChanged의 MVVM 라이트 구현 (RaisePropertyChanged()) normaly 모든 UI 요소를 업데이트 할 빈 문자열을 허용하지 않습니다. 그래서 하나의 CLass에서 INotifyPropertyCHanged의 구현을 오버라이드 할 수있는 방법이 있습니까?
덕분에, 나는 계속하고 싶어 UI 업데이트가 내 ViewModel에서 원칙적으로 호출되지 않습니다 (다른 콤보 박스는 데이터 관계 라기보다는 비즈니스 논리입니다.)하지만, 제 모델에 추가 할 수있는 그러한 빠른 수정을 통해이 문제를 해결할 것입니다. –