WPF从视图模型访问代码隐藏

时间:2017-11-09 05:03:39

标签: c# wpf xaml mvvm notifyicon

使用NotifyIcon project在我的c#app中显示气球。

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

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

1 个答案:

答案 0 :(得分:1)

在代码隐藏(View)中,您应该订阅属性更改事件(或其他一些事件,它实际上取决于您的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之外还有This is how it sees