这是又一个漫长的编码日,我可能正在寻找一些东西。但我不知道我错过了什么
ViewModel 中的 C# 代码
public String MainWindowText { get; set; }
public DelegateCommand CommandClose { get; set; }
public TitlebarViewModel()
{
MainWindowText = "My Epic Window!";
CommandClose = new DelegateCommand(CloseMain);
}
public void CloseMain(Object Sender)
{
App.Current.MainWindow.Close();
}
public class DelegateCommand : ICommand
{
private readonly Predicate<object> _canExecute;
private readonly Action<object> _execute;
public DelegateCommand(Action<object> execute)
: this(execute, null)
{
}
public DelegateCommand(Action<object> execute, Predicate<object> canExecute)
{
_execute = execute;
_canExecute = canExecute;
}
public virtual bool CanExecute(object parameter)
{
return _canExecute == null ? true : _canExecute(parameter);
}
public virtual void Execute(object parameter)
{
_execute(parameter);
}
public void RaiseCanExecuteChanged()
{
if (CanExecuteChanged != null)
{
CanExecuteChanged(this, EventArgs.Empty);
}
}
#pragma warning disable 67
public event EventHandler CanExecuteChanged;
#pragma warning restore 67
}
Xaml 代码:
<Window.DataContext>
<VM:TitlebarViewModel/>
</Window.DataContext>
<Grid>
<DockPanel>
<Image x:Name="Icon" Width="30" Height="30"/>
<Button x:Name="Close" Content="X" Width="25" Height="25" DockPanel.Dock="Right" Margin="2" Command="{Binding CommandClose}"/>
<TextBlock x:Name="TitleBarText" Text="{Binding MainWindowText}" TextAlignment="Center" Margin="7"/>
</DockPanel>
</Grid>
所以 MainWindow 文本框从我在 c# 构造函数中设置的内容中显示出来,所以我知道 datacontext 工作正常。我只是无法弄清楚为什么在单击按钮时无法触发委派命令。
我知道这可能真的很愚蠢。它很简单,但我盯着这个屏幕看了 50 分钟,我真的在寻找错误。尤其是当我已经完成了 100 次并且它在我的解决方案中的其他控件中时
多谢你们。