首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在WPF中正确绑定到元素属性

如何在WPF中正确绑定到元素属性
EN

Stack Overflow用户
提问于 2015-01-28 13:10:11
回答 1查看 1.2K关注 0票数 0

我对装订有点问题。我在我的xaml中有一个堆栈面板,它在子集合中有一些元素。第二,我有textblock,它显示堆栈面板中元素的计数。这是通过那样的绑定来完成的。

代码语言:javascript
运行
复制
<TextBlock Text="{Binding Children.Count, ElementName=CommentsContainer, Mode=OneWay,  StringFormat=({0})}" />

<StackPanel x:Name="CommentsContainer"></StackPanel>

它第一次运行良好,但是如果是添加到堆栈面板子集合中,文本块文本就不会更新。我的意思是,集合计数不会实现inotifypropertychange的更改,但是如何正确地进行这样的操作呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-28 13:53:49

你问“如何正确地做这件事”。WPF的方法是在您的Window或ViewModel上或其他什么地方将一组项作为属性实现,然后将ItemsControl绑定到该集合。

例如,如果您有一个字符串集合:

代码语言:javascript
运行
复制
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的绑定系统)。

在您的视图中查看这些项目(如。WindowUserControl等),您将使用一个控件,该控件可以显示项列表(其中一个来自ItemsControl),并将该控件绑定到list属性,如下所示:

代码语言:javascript
运行
复制
<Window ... >
    <StackPanel>
        <ItemsControl ItemsSource="{Binding MyItems}" />
        <TextBlock Text="{Binding MyItems.Count}" />
    </StackPanel>
</Window>

ObservableCollection<T>确实实现了INotifyPropertyChanged,因此Count属性总是反映列表中的实际项目数。

你不需要有一个字符串列表,当然,它们可以是任何类型的对象。类似地,您不必使用ItemsControl,而是可以使用类似于ListBoxListView的东西(它们都是从那个基类派生的)。此外,您可能需要查看数据模板,因为这可以用于更改ItemsControl中项的可视化外观。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28193163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档