小编pvd*_*dev的帖子

使用 MVVM 在中继命令中运行异步方法

我正在使用 WPF 和 MVVM 开发异步应用程序,但我似乎无法在我的中继命令中运行异步方法。

我的 WPF视图上有一个按钮连接到我的viewmodel 中的中继命令,它尝试在我的模型中调用异步方法以返回结果列表:

/// <summary>
/// Search results 
/// </summary>
private ObservableCollection<string> _searchResults = new ObservableCollection<string>(); 
public IList<string> SearchResults
{
    get { return _searchResults; }
}

/// <summary>
/// Search button command
/// </summary>
private ICommand _searchCommand;
public ICommand SearchCommand
{
    get
    {
        _searchCommand = new RelayCommand(
            async() =>
            {
                SearchResults.Clear();
                var results = await DockFindModel.SearchAsync(_selectedSearchableLayer, _searchString);
                foreach (var item in results)
                {
                    SearchResults.Add(item);
                }                    
                //notify results have changed …
Run Code Online (Sandbox Code Playgroud)

c# wpf mvvm async-await

2
推荐指数
1
解决办法
7240
查看次数

如何检查事件是否已在另一个表单/类中触发

所以尽可能简单地说,我有一个类从子内部打开一个表格,如下所示:

Public Sub LoadExtension()

    'various code...

    Dim form as new frmMain
    frmMain.ShowDialog()

    'various code...

End Sub
Run Code Online (Sandbox Code Playgroud)

在这个表单中我有两个按钮,一个只关闭表单,所以LoadExtension()子将继续.我想用来"退出"主类中的LoadExtension()子的另一个按钮,以便加载完全停止.表单模块中的按钮事件是这样的:

Private Sub btnStopLoad_click(sender as object, e as eventargs) handles btnStopLoad.click
    'exit the LoadExtension sub somehow
End sub
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最简单方法是什么?我以为我可以在LoadExtension()子(在.ShowDialog之后)做类似的事情:

If frmMain.btnStopLoad.clicked then
    Exit Sub
End If
Run Code Online (Sandbox Code Playgroud)

但它不会让我从类模块那样做,显然我需要使用'加注事件'或什么?我对事件的运作方式不太熟悉.有人能给我一个简单的解决方案吗?我会非常感激的.我一直在网上寻找解决方案,但没有取得任何成功.谢谢你的时间.

vb.net events winforms visual-studio-2013

1
推荐指数
1
解决办法
850
查看次数

标签 统计

async-await ×1

c# ×1

events ×1

mvvm ×1

vb.net ×1

visual-studio-2013 ×1

winforms ×1

wpf ×1