2016-11-29 3 views
5

В моей xaml У меня есть кнопка и TextBlockКак кнопку оставить включенным во время выполнения асинхронной задачи

<TextBlock Text="{Binding AText}" FontSize="20"/> 
<Button Content="Click" Command="{Binding MyCommand}" Grid.Row="1"/> 

и в моем ViewModel я следующий код

let aText = self.Factory.Backing(<@ self.AText @>, "Initial Text") 
let asyncTask x = async { 
    self.AText <- "Loading" 
    do! Async.Sleep(5000) 
    self.AText <- "Loaded" 
} 

member self.AText with get() = aText.Value and set(v) = aText.Value <- v  
member self.MyCommand = self.Factory.CommandAsyncChecked(asyncTask, fun _ -> true) 

При нажатии на кнопку, Он отключается и остается таким, пока он не закончит asyncTask. Я думал, что настройка canExecutetrue изменит поведение, но это не так!

Как управлять поведением кнопки?

+0

Что вы хотите сделать? Потому что текущее поведение является наиболее логичным. –

+0

@FoggyFinder of the course это. Поскольку у меня есть возможность передать 'canExecute' как аргумент' CommandAsyncChecked', поэтому кнопка должна делать то, что говорит 'canExecute'. Я думаю, что мой аргумент в этом случае более логичен. Вы согласны? –

+1

Да, это имеет смысл. –

ответ

6

Командная поддержка Async в FSharp.ViewModule была разработана специально для того, чтобы команды были отключены во время работы, чтобы предотвратить их возникновение несколько раз.

Если вы не хотите, что поведение, самый простой вариант является просто использовать обычную команду и запустить рабочий процесс асинхронной вручную:

let asyncTask() = async { 
    self.AText <- "Loading" 
    do! Async.Sleep(5000) 
    self.AText <- "Loaded" 
} |> Async.Start 

member self.MyCommand = self.Factory.Command asyncTask 

Нормальное поведение команды всегда остаются включенными.

+0

Работает. Еще один вопрос - как я могу изменить 'Xaml' в смеси? Я попытался открыть проект в blend, но он говорит «Unsupported .....................» –

+0

@EmonHaque Я не думаю, что Blend будет поддерживать его, не делая отдельный проект C#, который связывает/включает файлы xaml - Blend довольно ограничен в этом отношении. Обычно я просто редактирую файлы xaml. –

+0

Есть ли какой-нибудь инструмент отчетности, например 'CrystalReport' или' XtraReport', который работает в проекте 'FsXaml'? –

 Смежные вопросы

  • Нет связанных вопросов^_^