【问题标题】:WPF MVVM TextBlock binding to string in a class DependencyPropertyWPF MVVM TextBlock 绑定到类 DependencyProperty 中的字符串
【发布时间】: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


【解决方案1】:

您不能直接将TextBlock 绑定到源属性吗?:

<ItemsControl ...>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding DataContext.SelectedMember.MEMBERINFO.MEMBER_NAME, 
                        RelativeSource={RelativeSource AncestorType=ItemsControl}}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

【讨论】:

  • 我之前试过这个,但是一旦我将我的内容移动到 ItemsControl 中,它就不再可见了?
  • ItemsControl 的 ItemsSource 属性设置为什么?
  • 设置为我的 SelectedMember 依赖属性
  • 这是错误的。它应该设置为对象列表。如果您希望任何人能够帮助您,请发布代码的所有相关部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 2010-11-20
  • 2014-08-02
  • 1970-01-01
相关资源
最近更新 更多