現在のビューと現在のビューモデルを変更している ViewModelMain を取得しました。
public ViewModelBase CurrentVm { get; set; }
public UserControl Content
{
get { return _content; }
set
{
_content = value;
RaisePropertyChanged(() => Content); // this is the Line where i get the Exception
}
}
この問題は、LocBinding のある特定のビューから、LocBinding のない別のビューに移動するときに発生します。
現在のビューには、コンボボックスを持つ locBinding があります
<ComboBox MinWidth="45" MaxWidth="80" Grid.Column="1" ItemsSource="{Binding AmountUnits.View}" ItemTemplate="{StaticResource NameResourceKeyTextBoxItemTemplate}" />
アイテム テンプレート:
<DataTemplate x:Key="NameResourceKeyTextBoxItemTemplate" >
<StackPanel>
<StackPanel.Resources>
<lex:LocExtension x:Key="LocalizedHeader" x:Name="LocalizedHeader"/>
</StackPanel.Resources>
<Engine:LocBinding Source="{Binding Name, Mode=OneWay}" Target="{x:Reference LocalizedHeader}" />
<TextBlock Text="{x:Reference LocalizedHeader}" />
</StackPanel>
</DataTemplate>
バインディングのプロパティ(私のViewModel内):
private CollectionViewSource _amountUnits;
public CollectionViewSource AmountUnits
{
get { return _amountUnits; }
set { _amountUnits = value;
RaisePropertyChanged(() => AmountUnits);
}
}
AmountUnits.Source =
AmountUnit.GetAll().Select(x => new MaterialInputProp(x.Id, x.TransKey)
{
Name = x.TransKey,
IsSelected = x.IsSelected
}).ToList();
これはすべて正常に機能します...ただし、ViewModelMain でビューを変更していて、現在のビューの PropertyChanged が Raised である場合、NullReferenceException が発生します.. :/ 新しい ViewModel が空か複雑かは気にしません... UserControl コンテンツを変更すると、例外が発生します.. :/
例えば。ViewModelMain でビューを変更する方法
CurrentVm = new MaterialInputViewModel(mc.NewValue);
Content = new InputView();
コンテンツのセッターで壊れます...
スタックトレース:
at WPFLocalizeExtension.Engine.LocBinding.OnPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
at System.Windows.DependencyObject.InvalidateProperty(DependencyProperty dp, Boolean preserveCurrentValue)
at System.Windows.Data.BindingExpressionBase.Invalidate(Boolean isASubPropertyChange)
at System.Windows.Data.BindingExpression.TransferValue(Object newValue, Boolean isASubPropertyChange)
at System.Windows.Data.BindingExpression.Activate(Object item)
at System.Windows.Data.BindingExpression.OnDataContextChanged(DependencyObject contextElement)
at System.Windows.Data.BindingExpression.HandlePropertyInvalidation(DependencyObject d, DependencyPropertyChangedEventArgs args)
at System.Windows.Data.BindingExpressionBase.OnPropertyInvalidation(DependencyObject d, DependencyPropertyChangedEventArgs args)
at System.Windows.Data.BindingExpression.OnPropertyInvalidation(DependencyObject d, DependencyPropertyChangedEventArgs args)
at System.Windows.DependentList.InvalidateDependents(DependencyObject source, DependencyPropertyChangedEventArgs sourceArgs)
at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
...
さらに情報が必要な場合は、お尋ねください...助けが必要です! 緊急です... :/