猿问

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

我使用 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;

    }

这不会设置可见性..


我有点迷失了,我哪里错了?


慕田峪7331174
浏览 132回答 1
1回答

心有法竹

您必须注意实例化视图模型的方式,尤其是在共享视图模型时。现在,所有依赖类型都使用自己的实例MainViewModel(或不同的引用)。这就是为什么修改一个实例的值不会反映在另一个实例上。利用ResourceDictionary. 考虑MainViewModel通过在 App.xaml 资源内创建共享实例来使全局可访问。应用程序.xaml<Application ... >&nbsp; <Application.Resources>&nbsp; &nbsp; <ResourceDictionary>&nbsp; &nbsp; &nbsp; <VM:MainViewModel x:Key="SharedMainViewModel" />&nbsp; &nbsp; </ResourceDictionary>&nbsp; </Application.Resources></Application>主窗口.xaml<Window.DataContext>&nbsp; <StaticResource ResourceKey="SharedMainViewModel" /></Window.DataContext>MainWindow.xaml.cs (固定构造函数)public MainWindow(){&nbsp; InitializeComponent();&nbsp; &nbsp;&nbsp; // The DataContext is initialized via XAML&nbsp; &nbsp;}Abc.csclass Abc{&nbsp; private MainViewModel mainViewModel;&nbsp;&nbsp; public Abc()&nbsp; {&nbsp; &nbsp; this.mainViewModel = Application.Current.Resources["SharedMainViewModel"] as MainViewModel;&nbsp; }}
随时随地看视频慕课网APP
我要回答