Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未正确处理PropertyChanged事件_C#_Visual Studio 2010_Mvvm_Inotifypropertychanged - Fatal编程技术网

C# 未正确处理PropertyChanged事件

C# 未正确处理PropertyChanged事件,c#,visual-studio-2010,mvvm,inotifypropertychanged,C#,Visual Studio 2010,Mvvm,Inotifypropertychanged,我正在尝试让我的属性更改事件处理程序工作,并且我已经与dubugger一起检查了OnPropertyChanged方法正在被调用,但是它没有像我期望的那样调用该方法 public class MainViewModel : ObservableObject { public MainViewModel() { _characterSelection = new CharacterSelectionViewModel(); _characterSel

我正在尝试让我的属性更改事件处理程序工作,并且我已经与dubugger一起检查了OnPropertyChanged方法正在被调用,但是它没有像我期望的那样调用该方法

public class MainViewModel : ObservableObject
{
    public MainViewModel()
    {
        _characterSelection = new CharacterSelectionViewModel();
        _characterSelection.PropertyChanged += new PropertyChangedEventHandler(characterSelection_PropertyChanged);
    }

    private void characterSelection_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        if (e.PropertyName.Equals("Character"))
        {
            _character = _characterSelection.Character;
            _currentView = _newCharacter;
            OnPropertyChanged("CurrentView");
        }
    }
}

[Serializable]
public class ObservableObject : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    // Create the OnPropertyChanged method to raise the event 
    protected void OnPropertyChanged(string property)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(property));
        }
    }
}

public class CharacterSelectionViewModel : ObservableObject
{
    private void newCharacter()
    {
        CharacterSaver.SaveCharacter(CharacterName, _character);
        OnPropertyChanged("Character");
    }
}
我已经通过调试器逐步了解了这一点,调用了
MainViewModel()
的构造函数,并添加了
PropertyChangedEventHandler
。 此时,
\u characterSelection的PropertyChanged
事件具有以下值:(来自调试器中的“局部变量”选项卡)

调用
CharacterSelectionViewModel
中的
newCharacter
方法后,它将调用
OnPropertyChanged
。 此时,
\u characterSelection的PropertyChanged
事件具有以下值:

{Method = {Void OnPropertyChanged(System.Object, System.ComponentModel.PropertyChangedEventArgs)}}
OnPropertyChanged
事件到达
处理程序(这是新的PropertyChangedEventArgs(property))行,但从不调用
characterSelection\u PropertyChanged()
。不会抛出任何错误


我错过了什么?谢谢您的帮助。

您可以将绑定设置为使用单独的
CharacterSelectionViewModel
实例,而不是
MainViewModel
上的实例。检查绑定以确保已正确绑定到
MainViewModel
,并将其
CharacterSelectionViewModel
实例用于
ICommand
绑定以确保已正确引发您订阅的事件(在正确的实例上)。

我不确定,但您似乎在添加处理程序之前引发了事件。这是行不通的。我只是运行了你的代码,事件在
MainViewModel
中被引发并调用了处理程序。您如何调用
newCharacter
?我们需要更多的信息来解决这个问题。newCharacter是通过按下按钮调用的,使用ICommand调用。处理程序是在页面初始化期间添加的。您是如何绑定的?我刚刚创建了一个虚拟WPF页面,其中
MainViewModel
DataContext
,并在
CharacterSelectionViewModel
上创建了一个命令。我将该命令绑定到一个按钮(我将
\u characterSelection
字段作为
内部
属性公开,这样绑定为
characterSelection.NewCharacterCommand
),该命令调用
newCharacter()
,并按预期引发了所有问题。谢谢!datacontext就是问题所在。我在CharacterSelectionView文件中有:所以它创建了一个单独的类实例。如果你把它作为一个答案,我会认为它是正确的。
{Method = {Void OnPropertyChanged(System.Object, System.ComponentModel.PropertyChangedEventArgs)}}