【发布时间】:2015-09-25 15:09:29
【问题描述】:
序言:我正在为我们公司的需要制作一个日志工具。我们通过 Caliburn 在我们的项目中使用 MVVM 模式。目前,我的工具能够通过 Mono.Cecil 程序集编织编译后的代码,并在公共属性集方法中注入日志记录方法的调用。
Fabula:假设,我有一堂课Person
public class Person
{
public string Name
{
get { return _name; }
set
{
Logger.MyLogMethod(_name, value, "Person");
_name = value;
}
}
private string _name;
}
还有一个班级Logger
public static class Logger
{
public static void MyLogMethod(string oldvalue, string newvalue, string propertyname)
{
//condition to log only user changes
}
}
一个人的实例的名称属性绑定到文本框
<TextBox Text="{Binding SelectedPerson.Name}"/>
我们有一个按钮,点击它会调用一个代码,它将为 SelectedPerson 设置新值。
因此,我们有两种方法可以在运行时设置 Person 的 Name 属性。要么是用户在文本框中输入内容,要么是用户点击一个按钮,因此调用了一些代码。
我想知道:如何区分这两种情况。换句话说 - 当一个属性的 set 方法被调用时 - 如何确定它是由绑定引擎调用还是由我们的代码调用的。
到目前为止,我认为有一种可行的方法 - 看看 StackTrace。不知道该怎么做。
【问题讨论】:
标签: c# wpf mvvm mono.cecil