[英]Keep a MenuItem's IsChecked property synced with a bool
我有一個簡單的 WPF 應用程序,頂部有一個菜單。 我想添加一個選項,使主 window 保持在其他 windows 之上。
我在“屬性”>“設置”選項卡中創建了一個名為 setTopMost 的布爾值,供用戶保存此設置。 因此,即使應用程序終止,設置也會被記住。
一切都按預期工作,我可以單擊該選項或使用快捷鍵 Ctrl+T 使 window 保持在頂部,但是當 window 位於其他頂部時,我無法在選項旁邊出現復選標記windows。
我已經閱讀了幾篇關於將 IsChecked 綁定到布爾值的文章,但我自己無法解決這個問題。
這是我的代碼。
主窗口.xaml
<Window.InputBindings>
<KeyBinding Gesture="Ctrl+T" Command="{Binding TopMostCommand}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</Window.InputBindings>
<MenuItem Header="_Options">
<MenuItem x:Name="Menu_AlwaysOnTop" Header="Always On _Top" IsCheckable="True" IsChecked="{Binding isTopMost}" Command="{Binding TopMostCommand}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}}" InputGestureText="Ctrl+T" />
</MenuItem>
主窗口.xaml.cs
namespace WPF_Practice
{
public partial class MainWindow : Window
{
public bool isTopMost;
public MainWindow()
{
InitializeComponent();
DataContext = new PracticeDataContext();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
isTopMost = Properties.Settings.Default.setTopMost;
Topmost = Properties.Settings.Default.setTopMost;
}
}
public class PracticeDataContext
{
public ICommand TopMostCommand { get; } = new TopMostCommand();
}
public class TopMostCommand : ICommand
{
public void Execute(object parameter)
{
var TopMostClass = new MainWindow();
TopMostClass.WindowTopMost();
}
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged
{
add => CommandManager.RequerySuggested += value;
remove => CommandManager.RequerySuggested -= value;
}
}
}
請注意,我這樣做是一種愛好,對此很陌生。
您的MenuItem
未正確更新的主要原因是您將Window
的DataContext
設置為PracticeDataContext
。
public MainWindow()
{
InitializeComponent();
DataContext = new PracticeDataContext(); <--
}
這意味着您在MainWindow.xaml
中的綁定將在PracticeDataContext
中尋找屬性。
在這種情況下,您可能希望在您的PracticeDataContext
class 中有一個IsTopMost
屬性,以便綁定工作。
由於在Loaded
事件處理程序觸發之前不會設置IsTopMost
,因此您應該在PracticeDataContext
class 中實現INotifyPropertyChanged
,以便在從設置中設置IsTopMost
綁定時收到通知。
在INotifyPropertyChanged
上快速搜索會顯示很多示例。 這很容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.