为了账号安全,请及时绑定邮箱和手机立即绑定

WPF C# RadioButton 可见性在类中不起作用

WPF C# RadioButton 可见性在类中不起作用

C#
慕田峪7331174 2023-08-20 15:57:48
我使用 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;    }这不会设置可见性..我有点迷失了,我哪里错了?
查看完整描述

1 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

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


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


应用程序.xaml


<Application ... >

  <Application.Resources>

    <ResourceDictionary>


      <VM:MainViewModel x:Key="SharedMainViewModel" />

    </ResourceDictionary>

  </Application.Resources>

</Application>

主窗口.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;

  }

}


查看完整回答
反对 回复 2023-08-20
  • 1 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信