绑定 RelayCommand 不想执行
Binding RelayCommand don't want to execute
我有 Page.xaml
<Page>
<Page.DataContext>
<vm:ExcelViewModel />
</Page.DataContext>
<Grid>
<Button Command="{Binding Path=CopyCommand}" Margin="5"/>
</Grid>
</Page>
这是我的ExcelViewModel.cs
public ExcelViewModel()
{
SourcePath = @"\test\2019";
}
private readonly IExcelService fileService;
public ICommand CopyCommand{ get; private set; }
public ExcelViewModel(IExcelService fileService)
{
this.fileService = fileService;
CopyCommand= new RelayCommand(CopyExcel);
}
但是当我尝试 运行 "CopyExcel" 时什么也没有发生。
我做错了什么?
您正在使用默认构造函数在 XAML 中实例化 ExcelViewModel
class。您的 CopyCommand
仅在带有参数的第二个构造函数中初始化。
将它改成这样应该可以工作:
public ExcelViewModel()
{
SourcePath = @"\test\2019";
CopyCommand= new RelayCommand(CopyExcel);
}
private readonly IExcelService fileService;
public ICommand CopyCommand{ get; private set; }
public ExcelViewModel(IExcelService fileService)
{
this.fileService = fileService;
}
更新:
按照 Rand Random 的建议,从任何特殊构造函数调用默认构造函数总是一个好主意。
这不会解决您的问题(因为您的 XAML 视图调用默认构造函数)!
但作为参考,它看起来像这样:
public ExcelViewModel()
{
SourcePath = @"\test\2019";
CopyCommand= new RelayCommand(CopyExcel);
}
private readonly IExcelService fileService;
public ICommand CopyCommand{ get; private set; }
public ExcelViewModel(IExcelService fileService) : this()
{
this.fileService = fileService;
}
感谢 Rand Random。
我有 Page.xaml
<Page>
<Page.DataContext>
<vm:ExcelViewModel />
</Page.DataContext>
<Grid>
<Button Command="{Binding Path=CopyCommand}" Margin="5"/>
</Grid>
</Page>
这是我的ExcelViewModel.cs
public ExcelViewModel()
{
SourcePath = @"\test\2019";
}
private readonly IExcelService fileService;
public ICommand CopyCommand{ get; private set; }
public ExcelViewModel(IExcelService fileService)
{
this.fileService = fileService;
CopyCommand= new RelayCommand(CopyExcel);
}
但是当我尝试 运行 "CopyExcel" 时什么也没有发生。
我做错了什么?
您正在使用默认构造函数在 XAML 中实例化 ExcelViewModel
class。您的 CopyCommand
仅在带有参数的第二个构造函数中初始化。
将它改成这样应该可以工作:
public ExcelViewModel()
{
SourcePath = @"\test\2019";
CopyCommand= new RelayCommand(CopyExcel);
}
private readonly IExcelService fileService;
public ICommand CopyCommand{ get; private set; }
public ExcelViewModel(IExcelService fileService)
{
this.fileService = fileService;
}
更新:
按照 Rand Random 的建议,从任何特殊构造函数调用默认构造函数总是一个好主意。
这不会解决您的问题(因为您的 XAML 视图调用默认构造函数)! 但作为参考,它看起来像这样:
public ExcelViewModel()
{
SourcePath = @"\test\2019";
CopyCommand= new RelayCommand(CopyExcel);
}
private readonly IExcelService fileService;
public ICommand CopyCommand{ get; private set; }
public ExcelViewModel(IExcelService fileService) : this()
{
this.fileService = fileService;
}
感谢 Rand Random。