【发布时间】:2018-09-21 23:06:49
【问题描述】:
我有一个简单的列表框,其中选定的项目绑定到 ViewModel 的属性
<ListBox SelectedItem="{Binding SelectedItem, Mode=TwoWay}">
我有一个异步方法,我想在选择更改时运行它
async Task foo();
我可以将此调用放在SelectedItem 的设置器中,但这对我来说是一种代码味道。
public object SelectedItem
{
get{...}
set
{
foo(); //Compiler warning and blocks UI
...
}
}
Task.Run inside set 是一个选项,但在我看来仍然很糟糕,foo 抛出的异常会膨胀
SelectionChanged 事件背后的代码可能是另一种选择,但解决此问题的最 MVVM 方法是什么?
【问题讨论】:
-
我会使用异步 SelectedChanged 事件处理程序,它调用 DataContext 中的异步方法。
-
@Clemens 作为最纯粹的 MVVM 我想尽量减少背后代码的使用
-
后面的最小代码是
await ((ViewModel)DataContext).SomeAsyncMethod(listBox.SelectedItem); -
@Clemens 让我改写一下。后面的空代码将是我的最终目标..
-
@Clemens 希望找到一种通过交互 + 动作实现此目的的方法