如何从列表框选择中调用异步方法更改mvvm?

时间:2018-02-04 13:54:08

标签: wpf mvvm async-await

我在网上看了很多关于等待虚方法的坏处。我只是想知道可能的后果是什么?如果我通过网络从另一台机器获取数据,它会不会随着时间的推移而减慢我的应用程序?(我使用Task.Run并且它工作正常但只是有替代方案吗?)

CallTheCurrentWFControls()从本地计算机上的json文件加载数据,但我的异步方法只获取网络上的列表索引。

我发现我的自我使用了异步空洞,我怎么能打破这种模式?我缺少MVVM模式的一部分(在绑定列表框中处理选择的异步方法)?

MainWindow _MainWindow = Application.Current.MainWindow as MainWindow;

private ObservableCollection<WFControl> _CurrentFilteredControls;
public ObservableCollection<WFControl> CurrentFilteredControls
{
    get { return _CurrentFilteredControls; }
    set
    {
        if (_CurrentFilteredControls != value)
        {
            _CurrentFilteredControls = value;
            OnPropertyChanged();
        }
    }
}

private WFControl _SelectedCurrentFilteredControls;
public WFControl SelectedCurrentFilteredControls
{
    get { return _SelectedCurrentFilteredControls; }
    set
    {
        if (_SelectedCurrentFilteredControls != value)
        {
            _SelectedCurrentFilteredControls = value;
            CallTheCurrentWFControls();
            Task.Run(() => _MainWindow.UpdateIndex());
            OnPropertyChanged();

        }
    }
 }

public async void UpdateIndex()
{
    try
    {
        object o = await GetVentuxIndex(".Index");

    }
    catch (Exception ex)
    {
            LogFileController.WriteCurrentErrorOrWarningToXmlFile(ex.Message, "UpdateIndex");
    }
}

WPF:

<ListBox x:Name="lbx" ItemsSource="{Binding VM.CurrentFilteredControls, Mode=TwoWay}"   ItemContainerStyle="{StaticResource listContainerStyle}"   ItemTemplate="{DynamicResource dtWFC}"  SelectedItem="{Binding VM.SelectedCurrentFilteredControls, Mode=TwoWay}"  HorizontalAlignment="Right" Width="500" Margin="0,102,140,0" Height="338" VerticalAlignment="Top" Grid.Column="3" BorderThickness="4" BorderBrush="Black" />

0 个答案:

没有答案