メニューとステータスバーボタンで同じことを行うアプリケーションを模倣した次のサンプルがあります。
メニューからのみコマンドを実行すると、ツールバー ボタンは正常に更新されますが、toolbarbutton の使用を開始すると、メニューとツールバーが同期しなくなります。メニューを最初に使用するまで、メニューが更新されるツールバー ボタンから開始する別の方法を実行すると、同じことが起こります。
私は何が欠けていますか?
C#:
using System.ComponentModel;
using System.Windows.Input;
using Picis.Wpf.Framework.Commands;
namespace CheckTest
{
public partial class Window1 : INotifyPropertyChanged
{
private bool _state;
public ICommand ChangeStateCommand { get; private set; }
public bool State
{
get
{
return _state;
}
set
{
if (_state != value)
{
_state = value;
this.OnPropertyChanged("State");
}
}
}
public Window1()
{
this.ChangeStateCommand = new DelegateCommand<bool>(ExecuteChangeState);
InitializeComponent();
this.DataContext = this;
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string name)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
#endregion
private void ExecuteChangeState(bool state)
{
this.State = !state;
}
}
}
XAML:
<Window x:Class="CheckTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel>
<Menu IsMainMenu="True">
<MenuItem IsChecked="{Binding State, Mode=OneWay}" Command="{Binding ChangeStateCommand}" CommandParameter="{Binding State}" Header="Test" IsCheckable="True" />
</Menu>
<ToggleButton IsChecked="{Binding State, Mode=OneWay}" Command="{Binding ChangeStateCommand}" CommandParameter="{Binding State}" Content="Test2" />
</StackPanel>
</Window>