【问题标题】:WPF accessing code-behind from view modelsWPF 从视图模型访问代码隐藏
【发布时间】:2017-11-09 16:48:47
【问题描述】:

使用NotifyIcon project 在我的 c# 应用程序中显示气球。

我希望程序中的触发器在发生时显示为弹出窗口/气球。问题是我只能看到如何在 .xaml.cs 文件的代码隐藏中使用 .ShowCustomBalloon 方法显示气球,该文件在我的 ViewModel 中没有上下文。项目中的示例之所以有效,是因为它们使用代码隐藏来显示气球内容。

我需要的是一种在 .xaml 文件上设置一个事件监听器的方法,它可以触发这个显示气球,它绑定到 viewModel 的一个属性。问题是我在 c# app dev 方面的经验。不是很好,我想知道如何解决这个问题。

【问题讨论】:

    标签: c# wpf xaml mvvm notifyicon


    【解决方案1】:

    在代码隐藏(视图)中,您应该订阅属性更改事件(或其他一些事件,这实际上取决于您的 ViewModel 实现)。

    这里是示例 ViewModel:

    public class SomeViewModel : INotifyPropertyChanged
    {
      public event PropertyChangedEventHandler PropertyChanged;
    
      private string someProperty;
      public string SomeProperty
      {
          get { return someProperty; }
          set
          {
            someProperty = value;
            OnPropertyChanged();
          }
      }
    
      protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
      {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
      }
    }
    

    这是示例视图:

    public partial class SomeView : Window
    {
        public DiscImageView()
        {
            //  ...
    
            viewModel.PropertyChanged += ViewModel_PropertyChanged;
        }
    
        private void ViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            if (e.PropertyName == nameof(SomeViewModel.SomeProperty))
            {
                //  Logic for changed property event
            }
        }
    }
    

    还可以考虑使用一些 MVVM 库或框架,它们可以大大简化生活。我建议MVVMLight,除此之外还有messaging capabilities

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      • 2011-02-28
      • 2012-01-03
      • 1970-01-01
      相关资源
      最近更新 更多