내 뷰 모델에서 바운드 속성을 업데이트 할 때 NullReferenceException이 발생합니다. 이것은 뷰에서 treeview 컨트롤을 사용할 때만 발생합니다. 목록으로 대체하면 예외가 사라집니다. 어쩌면 소개NullReferenceException Treeview 및 PropertyChanged 사용
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
30 호출 후, 많은 PresentationFramework 및 WindowsBase 어셈블리를 통해 예외가 실제로 여기에 발생합니다 :
PresentationFramework.dll!System.Windows.StyleHelper.EvaluateOldNewStates()
이가 내 코드에서 디버거 나누기 어디
입니다 트 리뷰 :
<TreeView DockPanel.Dock="Bottom" ItemsSource="{Binding Source={StaticResource cvs}, Path=Groups}"
ItemTemplate="{StaticResource categoryTemplate}" SelectedItemChanged="TreeView_SelectedItemChanged"/>
그리고이 목록 상자를 대신 사용하면, 해당 속성을 업데이트하기 위해 전화를
public ObservableCollection<ApplicationServer> ApplicationServers
{
get { return this._applicationServers; }
private set
{
this._applicationServers = value;
this.NotifyPropertyChanged(() => this.ApplicationServers);
}
}
을 그리고 여기에 있습니다 : : 업데이트되는 속성을
<ListBox DockPanel.Dock="Bottom" ItemsSource="{Binding ApplicationServers}" DisplayMemberPath="Name"
SelectedItem="{Binding SelectedApplicationServer}" Height="auto"/>
내가이 도움이 될 것이라고 잘 모르겠지만, 여기에 있습니다 : 문제는 사라질
this.ApplicationServers = new ObservableCollection<ApplicationServer>(ApplicationServerLogic.GetAll().ToList());
경험이있는 사람이 있습니까? 문제의 원인을 알지 못하고 목록 상자를 사용하려고합니다. 실제로, 나는 꽤 많이 그 순간에리스트 박스를 사용해야한다. 어떻게이 문제를 해결할 수 있습니까? PresentationFramework 어셈블리의 버그일까요?
또한 내보기의 코드 숨김으로 항목 변경 이벤트 처리를 보여줍니다.
private void TreeView_SelectedItemChanged(object sender, System.Windows.RoutedPropertyChangedEventArgs<object> e)
{
((ApplicationServerViewModel)DataContext).SelectedApplicationServer = e.NewValue as ApplicationServer;
}
편집 : 누군가가 이렇게 여기있다, 더 많은 코드를 요구 :
<CollectionViewSource x:Key="cvs" Source="{Binding ApplicationServers}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="DeploymentEnvironment"/>
</CollectionViewSource.GroupDescriptions>
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Name" Direction="Ascending"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
<!-- Our leaf nodes (server names) -->
<DataTemplate x:Key="serverTemplate">
<TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>
<!-- Note: The Items path refers to the items in the CollectionViewSource group (our servers).
The Name path refers to the group name. -->
<HierarchicalDataTemplate x:Key="categoryTemplate"
ItemsSource="{Binding Path=Items}"
ItemTemplate="{StaticResource serverTemplate}">
<TextBlock Text="{Binding Path=Name}" FontWeight="Bold"/>
</HierarchicalDataTemplate>
setter를 통해 컬렉션 인스턴스를 변경하는 대신 항목을 컬렉션에 추가하는 것만 큼 없습니까? 모든 BS 코드를 제거하려고 시도한 ObservableCollection' –
에 컬렉션 변경 이벤트가 발생합니다. 'SelectedItemChanged = "TreeView_SelectedItemChanged"'. 'this.NotifyPropertyChanged (() => this.ApplicationServers);'to'새로운 PCEA ("ApplicationServers")'. 'categoryTemplate'은 어떻게 생겼습니까? MORE CODE PLZ –
@Aaron : 당신의 제안이 효과가 있었고 계속해서 treeview를 사용할 수있게되었습니다. 고맙습니다. –