Функция Caliburn Micro void не может быть запущена внутри DialogHost - PullRequest
0 голосов
/ 15 октября 2019

Обычно вы можете вызвать функцию void (из ViewModel) в View просто:

Имя кнопки = VoidFunctionInViewModel

Команда кнопки = {Binding Path = VoidFunctionInViewModel}

Нопри доступе к этой функции внутри DialogHost функция void не срабатывает.

Я попытался извлечь строковое поле в DialogHost, и оно работает нормально, но когда дело касается команд на кнопках, это не работает.

MainViewModel.cs Команды:

public async void OpenDialog()
   {
       var confirm = new ConfirmationView{DataContext = this};
       await DialogHost.Show(confirm);
   }
   public void Accept()
   {
       Console.WriteLine("It Failed!");
   }
   public string Success {get; set;} = "Success"

ConfirmationView.xaml:

<Button Command="{Binding Path=Accept}" Content="Accept"/>
<Button Command="{x:Static materialDesign:DialogHost.CloseDialogCommand}" Content="Cancel"/>
<TextBlock Name="Success"/>

MainView.xaml:

<materialDesign:DialogHost DialogTheme="Inherit" CloseOnClickAway="True">
</materialDesign:DialogHost>

Свойство "Успех »успешно используется и показывается DialogHost. Но кнопка «Принять» с помощью команды «Принять» не вызывается DialogHost.

Кнопка «Отмена» работает с командой materialDesign.

1 Ответ

0 голосов
/ 17 октября 2019

Разве это не должно быть так для caliburn.micro?

<Button x:Name="Accept" Content="Accept"/>

Использование синтаксиса Command = "" работает только при использовании ICommand или RelayCommand во ViewModel, или? По крайней мере, так я до сих пор понимал caliburn.micro.

Если это не сработает, вы можете попробовать это. Это сработало для меня в boxHost, где мне не удалось привязать команду caliburn.micro:

<Button cal:Message.Attach="[Event Click] = [Action Accept()]" Content="Accept" />

другие источники с примерами диалогов, которые могут быть полезны:

https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit/wiki/Dialogs

https://github.com/Keboo/MaterialDesignInXaml.Examples

...