我是WPF新手,我正在尝试实现自定义Command
,
我做的是我实现了ICommand
接口,我使用两种方式将该实现绑定到一个按钮,其中一个是静态扩展Marckup
和一个正常的绑定,
它适用于{x:Static}
,但在使用{Binding}
System.Windows.Data错误:39:BindingExpression路径错误: 'object'''ViewModel'上找不到'StartCommand'属性 (的HashCode = 30880833)”。 BindingExpression:路径=启动命令; DataItem ='ViewModel'(HashCode = 30880833);目标元素是'Button' (名称= '');目标
这是我的代码
XAML
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="75" Width="300">
<StackPanel Orientation="Horizontal" Height="30">
<Button Command="{Binding StartCommand}" Content="Start" Margin="5,0"/>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</Window>
代码
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
DataContext = new ViewModel { Name = "Simple property" };
}
}
class ViewModel
{
public string Name { get; set; }
// static to use with {x:Static}
public ICommand StartCommand = new StartCommand();
}
class StartCommand : ICommand
{
public bool CanExecute(object parameter)
{
return false;
}
public event System.EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameter)
{
MessageBox.Show("Start Executed");
}
}
我的代码出了什么问题?我弄乱了什么吗? 提前谢谢。
答案 0 :(得分:0)
因为
您可以
x:Static
对静态字段或属性进行引用
虽然字段不是有效的binding source,但您需要将其转换为属性:
public ICommand StartCommand { get; set; }
并在例如costructructor中初始化它
public ViewModel()
{
StartCommand = new StartCommand();
}