Связывание RelayCommand не хочет выполняться - PullRequest
0 голосов
/ 13 марта 2019

У меня есть 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», ничего не произошло.

Что я делаю не так?

1 Ответ

2 голосов
/ 13 марта 2019

Вы создаете экземпляр класса ExcelViewModel в XAML, используя конструктор по умолчанию. Ваш 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;   
}

Обновление:

Всегда полезно вызывать конструктор по умолчанию из любых специальных конструкторов, как предложил Рэнд Рэндом.

Это не решит вашу проблему (поскольку ваше представление 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.

...