[英]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.