【问题标题】:How to create a custom event when a property is changed?更改属性时如何创建自定义事件?
【发布时间】:2012-03-27 23:17:15
【问题描述】:

我创建了一个我自己的类,它具有双数据类型 X 和 Y 的公共属性,当其中一个发生更改时,我希望触发一个事件,该事件将用于更新可视对象的位置,例如帆布什么的。我一直在网上寻找答案,我真的不明白如何正确地做到这一点。我是编程新手,我看到有人提到 INotifyPropertyChanged,但我不知道如何使用它或将东西放在哪里。

我希望在 X 或 Y 发生更改时发生一个事件,我可以附加一个方法.. 请帮助

【问题讨论】:

    标签: c# wpf events properties inotifypropertychanged


    【解决方案1】:

    你需要学习Delegates and Events

    MSDN 也有一个example,这几乎就是你要问的

    从同一页面,这是相关部分;

        public void Update(double d)
        {
            radius = d;
            area = 3.14 * radius * radius;
            OnShapeChanged(new ShapeEventArgs(area));
        }
        protected override void OnShapeChanged(ShapeEventArgs e)
        {
            // Do any circle-specific processing here.
    
            // Call the base class event invocation method.
            base.OnShapeChanged(e);
        }
    

    【讨论】:

      【解决方案2】:

      如果你想做的任何事情都是同一个类的一部分,你可以使用 setter:

      public class Something
      {
          private string _Message;
          public string Message
          {
              get { return _Message;
              set
              {
                  if (_Message != value)
                  {
                      _Message = value;
                      CallSomeMethod();
                  }
              }
          }
      
          public void CallSomeMethod()
          {
              Debug.WriteLine("Message is now: " + Message);
          }
      }
      

      【讨论】:

      【解决方案3】:

      在您的视图模型类中,您可以在 X 和 Y 属性的设置器中调用更新方法:

          public double X
          {
              get
              {
                  return x;
              }
              set
              {
                  if (value != x)
                  {
                      x= value;
                      OnPropertyChanged("X");
                      VisualObjectUpdateMethod();
                  }
              }
          }
          private double x;
      

      更新您想要更新的任何内容的逻辑将位于 VisualObjectUpdateMethod 中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-09
        相关资源
        最近更新 更多