我对装订有点问题。我在我的xaml中有一个堆栈面板,它在子集合中有一些元素。第二,我有textblock,它显示堆栈面板中元素的计数。这是通过那样的绑定来完成的。
<TextBlock Text="{Binding Children.Count, ElementName=CommentsContainer, Mode=OneWay, StringFormat=({0})}" />
<StackPanel x:Name="CommentsContainer"></StackPanel>
它第一次运行良好,但是如果是添加到堆栈面板子集合中,文本块文本就不会更新。我的意思是,集合计数不会实现inotifypropertychange的更改,但是如何正确地进行这样的操作呢?
发布于 2015-01-28 13:53:49
你问“如何正确地做这件事”。WPF的方法是在您的Window
或ViewModel上或其他什么地方将一组项作为属性实现,然后将ItemsControl
绑定到该集合。
例如,如果您有一个字符串集合:
public ObservableCollection<string> MyItems { get; private set; }
// elsewhere in the same class...
MyItems = new ObservableCollection<string>();
MyItems.Add("first");
MyItems.Add("second");
MyItems.Add("etc");
ObservableCollection<T>
是用于WPF的一个很好的集合类,因为对集合所做的任何更改(例如添加或删除项)的通知将被推送到集合的任何观察者(例如WPF的绑定系统)。
在您的视图中查看这些项目(如。Window
、UserControl
等),您将使用一个控件,该控件可以显示项列表(其中一个来自ItemsControl
),并将该控件绑定到list属性,如下所示:
<Window ... >
<StackPanel>
<ItemsControl ItemsSource="{Binding MyItems}" />
<TextBlock Text="{Binding MyItems.Count}" />
</StackPanel>
</Window>
ObservableCollection<T>
确实实现了INotifyPropertyChanged
,因此Count
属性总是反映列表中的实际项目数。
你不需要有一个字符串列表,当然,它们可以是任何类型的对象。类似地,您不必使用ItemsControl
,而是可以使用类似于ListBox
或ListView
的东西(它们都是从那个基类派生的)。此外,您可能需要查看数据模板,因为这可以用于更改ItemsControl
中项的可视化外观。
https://stackoverflow.com/questions/28193163
复制相似问题