设置延迟以更新UWP中的绑定目标

时间:2016-11-23 12:01:11

标签: c# binding uwp

我绑定了我的ListView的SelectedValue和这个绑定使用的转换器。 我希望在延迟后执行ConvertBack方法,WPF似乎很容易,UWP则不行。 我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

如果您只是想延迟ConvertBack,那么您可以使用任务并致电Task.Result以返回您的值。例如:

public object ConvertBack(object value, Type targetType, object parameter, string language)
{
    var val = value.ToString();
    var task = Task.Run(async () =>
    {
        await Task.Delay(1000);
        return val;
    });
    return task.Result;
}

对于我使用此代码的方案,我使用双向绑定将SelectedIndex的{​​{1}}绑定到ListView的{​​{1}},这是演示:

Text

ViewModel和Model:

TextBox

整个转换器很简单:

<Page.DataContext>
    <local:BlankPage6ViewModel x:Name="ViewModel" />
</Page.DataContext>
<Page.Resources>
    <local:IndexToItemConverter x:Key="cvt" />
</Page.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="4*" />
    </Grid.RowDefinitions>
    <TextBox x:Name="tb" Text="5" Height="50" />
    <ListView ItemsSource="{Binding MyItems}"
          SelectionMode="Single"
          SelectedIndex="{Binding ElementName=tb, Path=Text, Mode=TwoWay, Converter={StaticResource cvt}}" Grid.Row="1">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding ID}" />
                    <TextBlock Text="{Binding Name}" Margin="5,0" />
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>

渲染此演示的图像: enter image description here

这个场景有一个非常好的博客,您可以查看:Async Programming : Patterns for Asynchronous MVVM Applications: Data Binding