我有两个单选按钮,它们使用双向绑定到两个布尔属性X
和Y
我的视图模型。由于单选按钮是互斥的,设置会X
自动清除Y
,反之亦然。现在,如果我导航到另一个页面,然后返回,再次导航到该页面并返回带有单选按钮的页面,这些按钮将停止工作。
重现问题的步骤:
- 创建一个新的 C# 通用 Windows 空白应用程序。
- 将最低版本和目标版本设置为 1809(1803 和 Fall Creators Update 的问题仍然存在)
在 App.xaml.cs 中,在行前添加以下代码
sealed partial class App : Application
(Do includeSystem.ComponentModel
andSystem.Runtime.CompilerServices
namespaces)public class ViewModel : INotifyPropertyChanged { private bool _X; public bool X { get => _X; set { if (value != _X) { _X = value; OnPropertyChanged(); } } } private bool _Y; public bool Y { get => _Y; set { if (value != _Y) { _Y = value; OnPropertyChanged(); } } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string propertyName = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }
并在课堂
App
上添加public static ViewModel VM = new ViewModel();
在 MainPage.xaml 中,将页面内容替换为
<StackPanel> <RadioButton IsChecked="{x:Bind VM.X, Mode=TwoWay}" Content="X"/> <RadioButton IsChecked="{x:Bind VM.Y, Mode=TwoWay}" Content="Y"/> <Button Content="Navigate" Click="Button_Click"/> </StackPanel>
并在 MainPage.xaml.cs 中,将
MainPage
类替换为public sealed partial class MainPage : Page { public ViewModel VM => App.VM; public MainPage() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { Frame.Navigate(typeof(BlankPage1)); } }
向您的项目添加一个空白页面,并在其 .xaml 文件中,将其页面内容替换为
<Grid> <Button Click="Button_Click" Content="Back"/> </Grid>
并在其 .cs 文件中,添加以下按钮处理程序
private void Button_Click(object sender, RoutedEventArgs e) { Frame.Navigate(typeof(MainPage)); }
编译并启动应用程序,一旦它运行,单击单选按钮以确认它们正在工作。
单击导航,然后单击返回。此时单选按钮正在工作。
再次单击导航,然后单击返回。按钮不再起作用。
是什么导致按钮停止工作?这是一个错误还是我错过了一些东西并且行为是预期的?谢谢。