C# 设置延迟以更新UWP中绑定中的目标
我绑定ListView的C# 设置延迟以更新UWP中绑定中的目标,c#,binding,uwp,C#,Binding,Uwp,我绑定ListView的SelectedValue,此绑定使用转换器。 我希望在延迟后执行ConvertBack方法,这在WPF中似乎很容易,但在UWP中却不容易。 如何执行此操作?如果您只想延迟转换,则可以使用任务并调用task.Result返回值。例如: public object ConvertBack(object value, Type targetType, object parameter, string language) { var val = value.ToStri
SelectedValue
,此绑定使用转换器。
我希望在延迟后执行ConvertBack
方法,这在WPF
中似乎很容易,但在UWP
中却不容易。
如何执行此操作?如果您只想延迟
转换
,则可以使用任务并调用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;
}
public class IndexToItemConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
Debug.WriteLine("CONVERT");
return Int32.Parse(value.ToString());
}
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
绑定到文本框的文本,下面是演示:
<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>
正在呈现此演示的图像:
这个场景有一个非常好的博客,你可以看看:。基于,你的关键问题仍然是在第一次加载项目时设置所选项目,如果使用SelectedIndex
或SelectedItem
而不是SelectedValue
,这对您的场景合适吗?@GraceFeng MSFT:不,这是另一个问题。请不要这样做。它会完全阻止你的UI线程并暂停应用程序(你甚至可以在上面的gif中看到它)。永远不要使用Task.Result。最好在设定者被击中后让设定者提升属性改变一秒钟。@dotMortend是个好建议。
public class IndexToItemConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
Debug.WriteLine("CONVERT");
return Int32.Parse(value.ToString());
}
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;
}
}