WPF C#RadioButton可见性在课堂上不起作用

WPF C#RadioButton可见性在课堂上不起作用,c#,wpf,mvvm,binding,boolean,C#,Wpf,Mvvm,Binding,Boolean,我正在使用BoolToVisConverter绑定单选按钮可见性 我将其放在xaml文件中: xmlns:VM="clr-namespace:ScreenS.ViewModel" <Window.DataContext> <VM:MainViewModel /> </Window.DataContext> <Window.Resources> <BooleanToVisibilityConverter x:Key="Bo

我正在使用BoolToVisConverter绑定单选按钮可见性

我将其放在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}" />
最后,在主窗口文件中,我设置:

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
(或不同的引用)实例。这就是为什么修改一个实例的值不会反映在另一个实例上

利用
资源字典
。考虑通过在App.xAML资源中创建共享实例,使<代码>主视图模型< /代码>全局可访问。

App.xaml

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

      <VM:MainViewModel x:Key="SharedMainViewModel" />
    </ResourceDictionary>
  </Application.Resources>
</Application>
<Window.DataContext>
  <StaticResource ResourceKey="SharedMainViewModel" />
</Window.DataContext>
Abc.cs

class Abc
{
  private MainViewModel mainViewModel; 

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

“我哪里出错了”-您有3个不同的MainViewModel实例:
DataContext=new MainViewModel()
MainViewModel viewModel=newmainviewmodel()。您需要使用一个稍有帮助的工具,您能顺便提供一些详细信息吗?为什么abc类与mainwindowviewmodel完全断开连接?如果它实际上是一个模型类,则更常见的做法是在mainwindowviewmodel中实例化它或解析实例。解析为使用依赖项注入容器。
public MainWindow()
{
  InitializeComponent();   
  // The DataContext is initialized via XAML   
}
class Abc
{
  private MainViewModel mainViewModel; 

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