내가 꽤 많은 시간을 보냈어요 OnPropertyChanged를 : 내 MVVM WPF 응용 프로그램에서 정의 된 데이터 그리드를 가지고MVVM WPF 데이터 그리드의 selectedItem 바인딩 화재를 통해 아래에 설명 된 문제를 해결하기 위해 노력하고 두 번
을의는 XAML 코드를 제거 다음과 같습니다 내 컨트롤러에서
public WorkItemForUi SelectedSomeItem
{
get
{
return SomeObject.SelectedSomeItem;
}
set
{
SomeObject.SelectedSomeItem = value;
OnPropertyChanged("SelectedSomeItem");
}
}
나는 다음있어 : 내 관련 뷰 모델에서
는<DataGrid AutoGenerateColumns="False" Name="dgdSomeDataGrid" SelectedItem="{Binding SelectedSomeItem, Mode=TwoWay}" ItemsSource="{Binding SomeItemCollection}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Id}" Header="ID" />
<DataGridTextColumn Header="Titel" Binding="{Binding Path=Title}" />
<DataGridTextColumn Header="Status" Binding="{Binding Path=State}" />
</DataGrid.Columns>
</DataGrid>
내가 좋아하는 해당 속성을 가지고
private void MainWindowViewModelPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "SelectedSomeItem")
{
UpdateSelectedSomeItem();
}
}
은 내가 일반적으로하고 싶은 것은 DataGrid
에서 선택한 항목을 검색하는 것입니다, 외부 데이터 저장소 (이 경우에는 TFS)에서 항목에 대한 좀 더 많은 정보를 얻을 보여 그 텍스트 상자에 추가 정보 .
이 모든 것은 이미 예상대로 작동하지만 은 한 번이 아니라이 아니라 두 번 MainWindowViewModelPropertyChanged 메서드가 호출된다는 점에서 문제가 있습니다.
그것은이 두 번 일어날 설정되는 SelectedItem
속성에 대해 설계된 경우가 있습니다,하지만 난 내가 찾은 많은 정보가 조금 모순 (및 여부 때로는 매우 명확하지 또한으로 아주 확실하지 않다 Windows Forms 또는 WPF를 의미합니다).
나는 때문에 바인딩 내 데이터에 인 selectionchanged 이벤트 핸들러가 DataGrid
에 대해 정의하고 IsSelected
속성이 사용되지만 내가 아는이 필요는 없습니다 몇 가지 제안을 보았다.
업데이트 MainWindowViewModelPropertyChanged 핸들러를 참조하는 초기화 방법이있는 MainWindowController의 일환으로.
public void Initialize(string tfsProjectCollection)
{
InitializeCommands();
InitializeViewModel();
AddWeakEventListener(m_MainWindowViewModel, MainWindowViewModelPropertyChanged);
}
어떤 아이디어가 내 문제의 원인 일 수 있습니까?
'MainWindowViewModelPropertyChanged()'는 ViewModel에서'INotifyPropertyChanged' 구현에 사용되는 ** 모든 ** 속성이 변경 될 때마다 호출됩니다. 그것은'e.PropertyName == "SelectedSomeItem"'두 호출에서 또는'e.PropertyName'에서 다른 값을 가지나요? –
어떤 이유로 인해 동일한 이벤트가 두 번 올 경우를 대비해'UpdateSelectedSomeItem(); '후에'e.Handled = true'를 시도 했습니까? – Scroog1
@JensH : 두 경우 모두 같습니다 ("SelectedSomeItem"). – Gorgsenegger