繁体   English   中英

WPF C#RadioButton可见性不适用于类

[英]WPF C# RadioButton visibility not working from class

我正在使用BoolToVisConverter绑定RadioButton可见性。

我把它放在xaml文件中:

xmlns:VM="clr-namespace:ScreenS.ViewModel" 

<Window.DataContext>
    <VM:MainViewModel />
</Window.DataContext>

<Window.Resources>
    <BooleanToVisibilityConverter x:Key="BoolToVisConverter" />
</Window.Resources>  

<RadioButton x:Name="SCB0" Visibility="{Binding ShowSCB0, Converter={StaticResource BoolToVisConverter}, FallbackValue=Hidden}" />

在MainViewModel文件中,输入:

using System.ComponentModel;

namespace ScreenS.ViewModel
{
public class MainViewModel : INotifyPropertyChanged
{
    private bool _scb0;

    private void NotifyPropertyChanged(string info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public bool ShowSCB0
    {
        get { return _scb0; }
        set
        {
            _scb0 = value;
            NotifyPropertyChanged("ShowSCB0");
        }
    }
}

最后,在MainWindow文件中,设置:

public MainWindow()
    {
        InitializeComponent();
        DataContext = new MainViewModel();
    }

    MainViewModel mainView => DataContext as MainViewModel;

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        mainView.ShowSCB0 = true;
    }

到这里为止,一切都很好。 问题是当我尝试从另一个类更改此值时。 我在用:

class abc
{
    MainViewModel viewModel = new MainViewModel(); 

public void someFunction()
    {   
         viewModel.ShowSCB0 = true;
    }

这不会设置可见性。

我有点迷路,我要去哪里错了?

您必须注意实例化视图模型的方式,尤其是在共享视图模型时。 现在,所有依赖类型都使用它们自己的MainViewModel实例(或不同的引用)。 因此,修改一个实例的值不会反映在另一个实例上。

利用ResourceDictionary 考虑通过在App.xaml资源内部创建共享实例来使MainViewModel全局访问。

应用程式

<Application ... >
  <Application.Resources>
    <ResourceDictionary>

      <VM:MainViewModel x:Key="SharedMainViewModel" />
    </ResourceDictionary>
  </Application.Resources>
</Application>

MainWindow.xaml

<Window.DataContext>
  <StaticResource ResourceKey="SharedMainViewModel" />
</Window.DataContext>

MainWindow.xaml.cs (固定的构造函数)

public MainWindow()
{
  InitializeComponent();   
  // The DataContext is initialized via XAML   
}

Abc.cs

class Abc
{
  private MainViewModel mainViewModel; 

  public Abc()
  {
    this.mainViewModel = Application.Current.Resources["SharedMainViewModel"] as MainViewModel;
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM