【发布时间】:2017-11-14 02:57:50
【问题描述】:
In my application I have a list of members in a DataGrid, and when a member is selected a member profile is populated with their details.成员配置文件由 10 多个 TextBlocks 组成,每个文本值都绑定到 string 类型的单个 DependencyProperty (DP)。
生成的成员列表为List<MEMBERINFO>,SelectedMember DP为MEMBERINFO类型。
public partial class MEMBERINFO
{
public GD_MEMBERDETAILS MEMBERDETAILS { get; set; }
public List<GD_ADDRESSDETAILS> ADDRESSDETAILS { get; set; }
public List<GD_VESSELDETAILS> BOATDETAILS { get; set; }
public GD_MEMBERSHIPS MEMBERSHIP { get; set; }
public List<string> FAMILYMEMBERS { get; set; }
}
目前,当在 DataGrid 中选择成员时,SelectedMember 值将分配给单个 DependencyProperties 以显示在成员资料中,例如
MemberName = SelectedMember.MEMBERINFO.MEMBER_NAME;
虽然这可行,但我觉得应该有一种更简洁的方法来做到这一点,因为我已经在 SelectedMember 中获得了我需要的所有信息。因此,与其拥有 10+ 个字符串 DependencyProperties 并从 SelectedMember 分配它们的值,有没有办法让容器内的所有 TextBlocks 的 ItemsSource 绑定到 SelectedMember 并将文本绑定到 @987654336 中的属性@?那么与使用 DataGrid 的方式相同吗?我知道 ListView 和 ListBox 也有 ItemsSource,但我的成员资料不是列表,我只想要一个简单的容器,它不像 DataGrids 和 ListViews/Box 那样具有任何固有功能。
注意:在另一个有类似问题的应用程序中,我设法操作 DataGrid 以删除它所有固有的 DataGrid 功能并在单个单元格中显示多个文本块,以便我可以使用它的 ItemsSource。但这很痛苦,所以我再次觉得应该有更简单的方法!
【问题讨论】:
-
听起来您应该使用数据模板显示您选择的成员。但是,您不应该在视图模型中使用依赖属性。
-
VM 中的 DP 并不是违反 MVVM 的那么大。这不是真正必要的,因为 INPC 属性更优越(它们是线程安全的,因为您可以从非 ui 线程更新它们并自动编组更改)。您应该获取框架指南的副本,但...
-
我只编程了两个多月,所以我现在正处于一个陡峭的学习曲线上!如果它们不应该在 ViewModel 中,那么它们应该在哪里?
标签: c# wpf mvvm binding dependency-properties