在学习WPF的时候遇到绑定命令传递参数的问题在此记录一下。
正常情况下只需要声明以下代就可以。
<Border Grid.Row="1" BorderThickness="1" BorderBrush="#f1f1f1">
<UniformGrid Rows="1" Columns="8" Height="70">
<Button Content="文件(F1)" Margin="10" Style="{StaticResource ButtonPrimary}" Command="{Binding NavigationButtonCommand}" />
<Button Content="设置(F2)" Margin="10"/>
<Button Content="定义(F3)" Margin="10"/>
</UniformGrid>
</Border>
private ICommand _NavigationButtonCommand;
public ICommand NavigationButtonCommand
{
get => _NavigationButtonCommand;
set =>SetProperty(ref _NavigationButtonCommand, value);
}
public HomeViewModel()
{
NavigationButtonCommand = new AsyncRelayCommand(ButonFunction);
}
public Task ButonFunction()
{
return Task.CompletedTask;
}
但是当我们想要传递参数的时候就需要在XAML中定义
CommandParameter="LoadFileView"
那么在VIEWMODEL中怎么定义呢?
private ICommand _NavigationButtonCommand;
public ICommand NavigationButtonCommand
{
get => _NavigationButtonCommand;
set =>SetProperty(ref _NavigationButtonCommand, value);
}
public HomeViewModel()
{
NavigationButtonCommand = new AsyncRelayCommand<object>(ButonFunction);
}
public Task ButonFunction(object e)
{
var a = e;
return Task.CompletedTask;
}
这样就可以了。
另外如果要把按钮自己穿过来就写成
CommandParameter="{Binding RelativeSource={RelativeSource self}}