如何在Metro应用程序中刷新UI?

时间:2012-06-20 00:48:08

标签: c# xaml windows-runtime microsoft-metro winrt-xaml

我在XAML页面中使用此代码:

<TextBox ItemsSource="{Binding Posters, Converter={StaticResource collectionToFirstElementConverter}, Mode=TwoWay}" />

海报是一个ObsevableCollection,我正在使用转换器来获取集合并获取它的第一个元素。

由于我正在使用异步过程,文本框接收对象,因此没有元素(Count = 0),并调用转换器。

我每次尝试添加新元素时都会尝试更新文本框,但不会调用转换器。

我记得在Silverlight或WPF中存在SourceTrigger或UpdatePropertyChanged,但在WinRT中我看不到这种模式。

1 个答案:

答案 0 :(得分:2)

实现这一目标的最简单方法是相应地修改包含Posters属性的视图模型。我可以看到两种方法(假设您的视图模型实现了INotifyPropertyChanged):

  • Posters.CollectionChanged添加事件处理程序,并在其中为INotifyPropertyChanged.PropertyChanged引发Posters
  • 添加另一个属性FirstPoster,返回Posters中第一个元素的值。在视图模型中,向Posters.CollectionChanged添加一个事件处理程序,在其中为INotifyPropertyChanged.PropertyChanged引发FirstPoster。这样你甚至不需要转换器。

我个人更喜欢第二种方法。