我遗漏了一些显而易见的东西:)
我有一个类,这个,创建另一个类svm的对象。当创建者收到保存的事件时,我希望在所创建的对象中触发OnSaved方法。(我希望这是明确的)。
但此对象中保存的事件始终为空。svm.OnSaved的方法从未添加到它中。
foreach (var rx in rxs)
{
StringByColumnViewModel svm = new StringByColumnViewModel();
this.Saved += svm.OnSaved;
}this.Saved是:
public event EventHandler Saved;
protected virtual void OnSaved()
{
if (Saved != null)
{
Saved(this, EventArgs.Empty);
}
}svm.OnSaved是:
public class StringByColumnViewModel
{
public EventHandler OnSaved;
public StringByColumnViewModel()
{
this.OnSaved = (s, e) => { Console.WriteLine("Here I am"); };
}任何帮助都是非常感谢的。
增编:在父类中,保存的事件被触发为:
private DelegateCommand save;
public DelegateCommand Save
{
get
{
if (save == null)
{
save = new DelegateCommand(
() => this.doSave()
);
}
return save;
}
}
private object doSave()
{
OnSaved(); <--THE SAVED EVENT IS NULL???
return null;
}增编2:相信问题是一流的没有达到“创建者”类,这是怎么做到的?
顶级类的视图模型如下:
ViewModelBase CurrentViewModel = new MyNewViewModel();这是失败的:
this.Saved += CurrentViewModel.OnSaved();当ViewModelBase有:
public event EventHandler Saved;
public EventHandler OnSaved()
{
if (Saved != null)
{
Saved(this, EventArgs.Empty);
}
}使用“并非所有代码路径都返回值”
该怎么办??
发布于 2014-09-14 20:25:37
你确定你真的打电话给
foreach (var rx in rxs)
{
StringByColumnViewModel svm = new StringByColumnViewModel();
this.Saved += svm.OnSaved;
}在活动发起之前订阅?在那之后你不取消订阅吗?可能您在派生类中使用相同的名称声明了事件,这会隐藏基类中的事件。你能张贴更多你的代码吗?
下面是一个简单的工作示例,其中创建者调用svm.OnSaved
class Program
{
static void Main(string[] args)
{
var th = new This();
th.OnSaved(); //creator receives a saved event
}
}
public class This
{
public event EventHandler Saved;
public virtual void OnSaved()//made public in that example
{
if (Saved != null)
{
Saved(this, EventArgs.Empty);
}
}
public This()
{
var rxs = new List<int> { 1, 2, 3 };
foreach (var rx in rxs)
{
var svm = new StringByColumnViewModel();
this.Saved += svm.OnSaved;
}
}
}
public class StringByColumnViewModel
{
public EventHandler OnSaved;
public StringByColumnViewModel()
{
this.OnSaved = (s, e) => { Console.WriteLine("Here I am"); };
}
}尝试不使用委托而不是事件,将StringByColumnViewModel更改为
public class StringByColumnViewModel
{
public event EventHandler OnSaved;
public StringByColumnViewModel()
{
this.OnSaved = (s, e) => { Console.WriteLine("Here I am"); };
}
public void RaiseSave(object sender, EventArgs e)
{
var handler = OnSaved;
if (handler!= null)
{
handler(this, new EventArgs());
}
}
}和
this.Saved += svm.RaiseSave;发布于 2014-09-14 20:32:39
帮助您找到错误的重要信息似乎缺少了,但是基于以下事实:
可能是您混淆了类和对象。事件处理程序被分配给一个特定的对象,并且只有这一个对象,并且您可能在另一个对象上调用OnSaved,该对象没有一个事件处理程序。
解决这个问题的方法是确保您使用的是正确的类实例,即正确的对象。如果你希望它是同一个对象
https://stackoverflow.com/questions/25837181
复制相似问题