WPF 集合类型绑定的问题

zmidl 2017-03-18 12:40:35
首先建了一个UserControl控件MyControl 有6个TextBlock 然后定义一个IEnumerable类型的依赖属性 Source来接受一个集合数据源。然后 每个TestBlock分别绑定这个Source 的每个项 比如
<TextBlock Text={Binding Source[0]}/>
<TextBlock Text={Binding Source[1]}/>
<TextBlock Text={Binding Source[2]}/>

使用这个MyControl的时候 我的ViewModel 里有个属性是 ObservableCollection<string> Names 作为MyControl的数据源比如:
<MyControl Source={Binding Names}/>
到这里 一切都顺利 我的6个文本框都显示了数据源里的字符串
现在我有个改变 我要建一个Man类 把Name作为属性放进去 并且再加一个 Age的属性 比如
class Man()
{
private string name=string.Empty;
public string Name{get{return name ;};set{name = value ; RaisePropertyChanged(nameof(name));}}

private int age=0;
public int Age.........
}

这样的话 原本ObservableCollection<string> Names 的数据源 变成了ObservableCollection<Man> Mans

而我绑定的是Mans里面的Name这个属性的集合 我该如何实现绑定呢?
我目前用了一个笨办法实现了 但是感觉不是最好 是再建一个属性集合去得到这个Name的集合 比如
public ICollection<string> Names{ get { return this.Mans.Select(o=> o.Name).ToList(); } }
然后每次set属性后还要额外通过事件去通知父对象去RaisePropertyChanged 这个Names集合。
可用分不多了希望朋友们支个招吧。
...全文
282 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zmidl 2017-03-20
  • 打赏
  • 举报
回复
结帖 分数计算有问题,永远剩5分 解不了贴啊?明天再来吧
zmidl 2017-03-20
  • 打赏
  • 举报
回复
引用 8 楼 xuggzu 的回复:
你是不想改xaml呈现?那就再给man类加个object属性,绑定它,代码里想给它什么就给什么。但我有个疑问,xaml也就改个绑定,那界面的标题或其它你怎么.统一?
好吧就这么招了。
exception92 2017-03-20
  • 打赏
  • 举报
回复
获取Man类的所有属性,后台遍历属性集合,同时生成xaml以及对应的绑定。就是从后台生成前台的xaml。
xuggzu 2017-03-19
  • 打赏
  • 举报
回复
你是不想改xaml呈现?那就再给man类加个object属性,绑定它,代码里想给它什么就给什么。但我有个疑问,xaml也就改个绑定,那界面的标题或其它你怎么.统一?
zmidl 2017-03-19
  • 打赏
  • 举报
回复
引用 3 楼 zmidl 的回复:
[quote=引用 1 楼 Forty2 的回复:] 不妨试试? <TextBlock Text={Binding Source[0].Name}/>
这个我知道啊 但是 这个Name也是一个集合啊 是我的Mans 里面所有的Name 如果ObservableCollection<Man> 有10行那么我要10个Name的集合。[/quote] 这里我理解错了 请无视这条回复
引用 6 楼 xuggzu 的回复:
datacontext=mans text=binding Value[0].Name
这个明白 我试过了 ok的 问题是如果这个MyControl控件今后改需求了 要显示年龄了 我还得改代码 把“text=binding Value[0].Name”改成“text=binding Value[0].Age” 不是 。既然依赖属性通过外部注入的话,尽可能可以改变数据源的绑定方式 而不用去动相对底层的代码。是想有这么一个方式的,不知道还有什么好办法。
cheng2005 2017-03-19
  • 打赏
  • 举报
回复
楼主真有意思,界面上本来显示name,以后想改成显示age。这根本就是界面的改动,不去改界面,反而要去改数据。 就好像昨天吃的土豆,今天想吃辣椒,不去买辣椒吃,而且做手术把自己的嘴改造,好让嘴觉得吃的不是土豆,而是辣椒。 真实难以理解楼主的思维。
xuggzu 2017-03-18
  • 打赏
  • 举报
回复
datacontext=mans
text=binding Value[0].Name
zmidl 2017-03-18
  • 打赏
  • 举报
回复
引用 2 楼 xuggzu 的回复:
同上,xaml绑定可以有下标,也可以指定属性
我有个想法 就是 让我的控件的 DataContent = {Binding Mans} 然后 我的Source={Binding Name} 但是没有效果 绑定不了
zmidl 2017-03-18
  • 打赏
  • 举报
回复
引用 1 楼 Forty2 的回复:
不妨试试? <TextBlock Text={Binding Source[0].Name}/>
引用 1 楼 Forty2 的回复:
不妨试试? <TextBlock Text={Binding Source[0].Name}/>
额。。这样我的自定义的控件MyControl 不是没有面向对象了吗?以后绑定其他属性 我还得改我的控件库啊!这个也是个笨办法不是长久之计啊。。。
zmidl 2017-03-18
  • 打赏
  • 举报
回复
引用 1 楼 Forty2 的回复:
不妨试试? <TextBlock Text={Binding Source[0].Name}/>
这个我知道啊 但是 这个Name也是一个集合啊 是我的Mans 里面所有的Name 如果ObservableCollection<Man> 有10行那么我要10个Name的集合。
xuggzu 2017-03-18
  • 打赏
  • 举报
回复
同上,xaml绑定可以有下标,也可以指定属性
Forty2 2017-03-18
  • 打赏
  • 举报
回复
不妨试试? <TextBlock Text={Binding Source[0].Name}/>
Windows Presentation Foundation (WPF) 是.NET Framework 3.0 的关键组件,是支持下一代视窗应用程序表现层编程的平台,也是微软新发布的Vista操作系统的三大核心开发库之一,主要负责图形显示。本书是针对那些对用户界面开发感兴趣的软件开发人员编写的,易于理解,适合那些.NET的新手,并有助于理解像Microsoft Expression Blend这样产品的精髓。   本书适合各层次Web开发人员阅读。 第一部分 背景 第1章 为什么创造WPF    1.1 回顾过去    1.2 步入WPF    1.3 作为.NET Framework的组成部分     1.3.1 为托管代码而设计     1.3.2 强调声明式描述    1.4 小结   第2章 XAML揭秘    2.1 XAML定义    2.2 元素和特性    2.3 命名空间    2.4 属性元素    2.5 类转换器    2.6 标记扩展    2.7 对象元素的子元素     2.7.1 内容属性     2.7.2 集合项     2.7.3 更多类转换    2.8 编译:将XAML与过程式代码混合使用     2.8.1 在运行时加载和解析XAML     2.8.2 编译XAML     2.8.3 XAML关键字    2.9 小结     2.9.1 抱怨1:XML太过冗长不便于输入     2.9.2 抱怨2:基于XML的系统性能差   第3章 WPF的重要新概念    3.1 逻辑树与可视树    3.2 依赖属性     3.2.1 依赖属性的实现     3.2.2 变更通知     3.2.3 属性值继承     3.2.4 对多个提供程序的支持     3.2.5 附加属性    3.3 路由事件     3.3.1 路由事件的实现     3.3.2 路由策略和事件处理程序     3.3.3 路由事件实践     3.3.4 附加事件    3.4 命令     3.4.1 内建命令     3.4.2 使用输入手势执行命令     3.4.3 带有内建命令绑定的控件    3.5 漫游类层次    3.6 小结  第二部分 构建WPF应用程序  第4章 WPF控件   第5章 尺寸缩放、定位与变换元素   第6章 使用面板做布局   第7章 构建并部署应用程序  第三部分 为专业开发人员设计的功能  第8章 资源   第9章 数据绑定   第10章 样式、模板、皮肤和主题 233 第四部分 通过富媒体使程序领先于时代  第11章 2D图形   第12章 3D图形   第13章 动画   第14章 音频、视频、语音和文档  第五部分 高级主题  第15章 与Win32、Windows Form以及ActiveX之间的互用性   第16章 用户控件和自定义控件   第17章 使用自定义面板做布局  第六部分 附录 附录 有用的工具 
Windows Presentation Foundation (WPF) 是.NET Framework 3.0 的关键组件,是支持下一代视窗应用程序表现层编程的平台,也是微软新发布的Vista操作系统的三大核心开发库之一,主要负责图形显示。本书是针对那些对用户界面开发感兴趣的软件开发人员编写的,易于理解,适合那些.NET的新手,并有助于理解像Microsoft Expression Blend这样产品的精髓。   本书适合各层次Web开发人员阅读。 第一部分 背景 第1章 为什么创造WPF    1.1 回顾过去    1.2 步入WPF    1.3 作为.NET Framework的组成部分     1.3.1 为托管代码而设计     1.3.2 强调声明式描述    1.4 小结   第2章 XAML揭秘    2.1 XAML定义    2.2 元素和特性    2.3 命名空间    2.4 属性元素    2.5 类转换器    2.6 标记扩展    2.7 对象元素的子元素     2.7.1 内容属性     2.7.2 集合项     2.7.3 更多类转换    2.8 编译:将XAML与过程式代码混合使用     2.8.1 在运行时加载和解析XAML     2.8.2 编译XAML     2.8.3 XAML关键字    2.9 小结     2.9.1 抱怨1:XML太过冗长不便于输入     2.9.2 抱怨2:基于XML的系统性能差   第3章 WPF的重要新概念    3.1 逻辑树与可视树    3.2 依赖属性     3.2.1 依赖属性的实现     3.2.2 变更通知     3.2.3 属性值继承     3.2.4 对多个提供程序的支持     3.2.5 附加属性    3.3 路由事件     3.3.1 路由事件的实现     3.3.2 路由策略和事件处理程序     3.3.3 路由事件实践     3.3.4 附加事件    3.4 命令     3.4.1 内建命令     3.4.2 使用输入手势执行命令     3.4.3 带有内建命令绑定的控件    3.5 漫游类层次    3.6 小结  第二部分 构建WPF应用程序  第4章 WPF控件   第5章 尺寸缩放、定位与变换元素   第6章 使用面板做布局   第7章 构建并部署应用程序  第三部分 为专业开发人员设计的功能  第8章 资源   第9章 数据绑定   第10章 样式、模板、皮肤和主题 233 第四部分 通过富媒体使程序领先于时代  第11章 2D图形   第12章 3D图形   第13章 动画   第14章 音频、视频、语音和文档  第五部分 高级主题  第15章 与Win32、Windows Form以及ActiveX之间的互用性   第16章 用户控件和自定义控件   第17章 使用自定义面板做布局  第六部分 附录 附录 有用的工具 

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧