C# 要在wpf中显示/隐藏来自ViewModel的控件吗

C# 要在wpf中显示/隐藏来自ViewModel的控件吗,c#,wpf,mvvm,C#,Wpf,Mvvm,我想在wpf中显示/隐藏ViewModel控件。但是NotifyingProperty不能正常工作这是我的代码 这是我对设计视图的控制 <ZuneWithCtrls_UserControls:SmallClock Visibility="{Binding IsProcessStart, Converter={StaticResource BooleanToVisibilityConverter}}" Height="Auto" Width="Auto" V

我想在wpf中显示/隐藏ViewModel控件。但是NotifyingProperty不能正常工作这是我的代码

这是我对设计视图的控制

<ZuneWithCtrls_UserControls:SmallClock Visibility="{Binding IsProcessStart, Converter={StaticResource BooleanToVisibilityConverter}}" 
                Height="Auto" Width="Auto" VerticalAlignment="Center" HorizontalAlignment="Center" Canvas.Top="150"/>
我正在更改按钮单击命令的此属性,但它不起作用。请帮忙。 如果这将从Dependency属性起作用,那么谁可以在ViewModel中使用Dependency属性

加水剂接种

[ViewModel]
public class AdvanceSearchViewModel : PageViewModel, INotifyPropertyChanged
{
    /// <summary>
    /// Initializes a new instance of the <see cref="AdvanceSearchViewModel"/> class.
    /// </summary>
    /// 
    public event PropertyChangedEventHandler PropertyChanged;
    public AdvanceSearchViewModel()
    {

        IsProcessStart = false;

    }

    //IsProcessStart
    private bool _IsProcessStart;
    public bool IsProcessStart
    {
        get { return _IsProcessStart; }
        set
        {
            _IsProcessStart = value;
            OnPropertyChanged("IsProcessStart");
        }
    }

    // Create the OnPropertyChanged method to raise the event 
    protected void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }
}
[ViewModel]
公共类高级搜索视图模型:页面视图模型,INotifyPropertyChanged
{
/// 
///初始化类的新实例。
/// 
/// 
公共事件属性更改事件处理程序属性更改;
公共高级搜索视图模型()
{
IsProcessStart=false;
}
//iProcessStart
私有bool\u IsProcessStart;
公共bool IsProcessStart
{
获取{return\u IsProcessStart;}
设置
{
_IsProcessStart=值;
OnPropertyChanged(“IsProcessStart”);
}
}
//创建OnPropertyChanged方法以引发事件
受保护的void OnPropertyChanged(字符串名称)
{
PropertyChangedEventHandler处理程序=PropertyChanged;
if(处理程序!=null)
{
处理程序(此,新PropertyChangedEventArgs(名称));
}
}
}

不应在ViewModel中使用DependencyProperty

在ViewModel中应该执行的操作是,实现INotifyPropertyChanged


您应该在ViewModel中实现这样的InotifyProperty更改

public class AdvanceSearchViewModel: INotifyPropertyChanged 
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }

    .....
    Your Properties Here
    .....

    private bool _isProcessStart
    public bool IsProcessStart
    {
       get { return _isProcessStart; }
       set { 
             _isProcessStart = value; 
             OnPropertyChanged("IsProcessStart"); }
           }
}
要设置此属性,只需跟进ViewModel并按如下方式进行设置-

private void MyButton_Click(object sender, RoutedEventArgs e)
  {
    var isStarted = ViewModel.IsProcessStart;
    ViewModel.IsProcessStart = !isStarted;
  }

嗨,Mayur,我试过这个,但在我的情况下不起作用。请检查我的更新代码。谢谢你的回复。在阅读你的评论之后。我在我这边试过,效果很好。还请提及如何设置我发布的“IsProcessStart”的值1。用户控制代码,2。ViewModel代码(带IsProcessStart).Visibility=“{Binding IsProcessStart,Converter={StaticResource BooleanToVisibilityConverter}}”我正在使用Apex.dll。这有什么问题吗。我已经用InotifyPropertyChanged更新了我的帖子,但仍然不起作用。Plz帮助
public class AdvanceSearchViewModel: INotifyPropertyChanged 
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }

    .....
    Your Properties Here
    .....

    private bool _isProcessStart
    public bool IsProcessStart
    {
       get { return _isProcessStart; }
       set { 
             _isProcessStart = value; 
             OnPropertyChanged("IsProcessStart"); }
           }
}
private void MyButton_Click(object sender, RoutedEventArgs e)
  {
    var isStarted = ViewModel.IsProcessStart;
    ViewModel.IsProcessStart = !isStarted;
  }