如何从视图模型中调用视图中定义的方法

时间:2018-01-02 06:27:33

标签: wpf mvvm

我有一个功能可以控制视图中圆形进度条的可见性。

public void ShowProgressBarControl()
{
   CircleProgressBar.Visibility = Visibility.Visible;
   CircleProgressBar.Opacity = 1;
}

我想从视图模型中调用该方法。我怎么称呼?

2 个答案:

答案 0 :(得分:1)

  

正如@tabby建议我在viewmodel和bind中使用公共属性   使用可见性转换器到CircleProgressBar。对于绑定opactiy,您可以直接绑定它。

Viewmodel 假设您使用了INotifyPropertyChanged接口。在INPC中包裹该属性。

public bool IsBusy;
public int Opacity;


SomeAction()
{
   IsBusy = true;
   Thread.Sleep(5000);
   IsBusy = false;
   Opactiy = 1;

}

<强>转换器

 public BooleanVisibiltyConverter: IValueConverter
 { 
  public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  {
    bool flag = false;
    if (value is bool)
    {
        flag = (bool)value;
    }
    else if (value is bool?)
    {
        bool? nullable = (bool?)value;
        flag = nullable.HasValue ? nullable.Value : false;
    }
    return (flag ? Visibility.Visible : Visibility.Collapsed);
  }
}

<强> XAML

在使用之前将转换器添加到窗口资源中。

<CircularProgressBar Opacity="{Binding Opactiy}"  Visibility="{Binding IsBusy, Converter={StaticResource BoolToVis}}"

答案 1 :(得分:-1)

将您的视图引用传递给viewmodel的构造函数

 public MainWindow()
        {
            InitializeComponent();
            this.DataContext = new MainWindowViewModel(this);
        }

viewmodel class

public class MainWindowViewModel
        {
            MainWindow mWindow; 
            public MainWindowViewModel(MainWindow window)
            {
               mWindow = window;
            }
        }

然后你可以通过mWindow

在viewmodel中调用你的方法