通过 XAML 绑定将自定义对象传递给 UserControl

2024-01-08

我想要做的是创建一个 UserControl,我可以向其传递一个 Address 对象。似乎当我经过Address="{Binding Path=Person.Address}"到 UserControl,嵌入的 TextBox 绑定到Text="{Binding Path=Person.Address}"代替Text="{Binding Path=Address.Summary}"

我这一切都错了吗?

如果您想使用该项目,请点击以下链接:http://dl.dropbox.com/u/4220513/WpfApplication2.zip http://dl.dropbox.com/u/4220513/WpfApplication2.zip

域对象:

namespace WpfApplication2
{
    public class Person
    {
        public String Name { get; set; }
        public Address Address { get; set; }
    }

    public class Address
    {
        public String Street { get; set; }
        public String City { get; set; }

        public String Summary { get { return String.Format("{0}, {1}", Street, City); } }
    }
}

主窗口:

namespace WpfApplication2
{
    public partial class MainWindow : Window
    {
        private readonly ViewModel vm;
        public MainWindow()
        {
            InitializeComponent();
            vm = new ViewModel();
            DataContext = vm;

            vm.Person = new Person()
            {
                Name = "Bob",
                Address = new Address()
                {
                    Street = "123 Main Street",
                    City = "Toronto",
                },
            };
        }
    }

    public class ViewModel : INotifyPropertyChanged
    {
        private Person person;
        public Person Person { get { return person; } set { person = value; NotifyPropertyChanged("Person"); } }

        public event PropertyChangedEventHandler PropertyChanged;

        protected void NotifyPropertyChanged(String propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication2"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel>
        <TextBlock Text="Name:" />
        <TextBlock Text="{Binding Path=Person.Name}" />
        <TextBlock Text="Address:" />
        <local:AddressView Address="{Binding Path=Person.Address}" />
    </StackPanel>
</Window>

用户控制:

namespace WpfApplication2
{
    public partial class AddressView : UserControl
    {
        public AddressView()
        {
            InitializeComponent();
            DataContext = this;
        }

        public Address Address
        {
            get { return (Address)GetValue(AddressProperty); }
            set { SetValue(AddressProperty, value); }
        }

        public static readonly DependencyProperty AddressProperty =
            DependencyProperty.Register("Address", typeof(Address), typeof(AddressView));
    }
}

<UserControl x:Class="WpfApplication2.AddressView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <TextBox Text="{Binding Path=Address.Summary}" IsReadOnly="True" />
</UserControl>

Error:

System.Windows.Data Error: 40 : BindingExpression path error: 'Person' property not found on 'object' ''AddressView' (Name='')'. BindingExpression:Path=Person.Address; DataItem='AddressView' (Name=''); target element is 'AddressView' (Name=''); target property is 'Address' (type 'Address')

在 MainWindow.xaml 中:

<local:AddressView DataContext="{Binding Path=Person.Address}" />

然后在AddressView.xaml中

<TextBox Text="{Binding Path=Summary, Mode=OneWay}" IsReadOnly="True" />

这为我显示了摘要。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 XAML 绑定将自定义对象传递给 UserControl 的相关文章

  • 在 OnModelCreating 期间设置列名称

    Issue 我目前正在尝试通过设置的属性为我的表及其列添加前缀 我正在使用实体框架核心 我已经正确地为表名添加了前缀 但我似乎无法弄清楚列的前缀 我有一种感觉 我需要使用反射 我已经留下了我的 可能很糟糕的 反思尝试 有人有办法在实体中设置
  • 有没有办法在 xcode 上使用 c++0x ?我想使用 gcc 4.4 或更高版本

    我想使用 gcc 4 4 或更高版本进行 iphone 开发 有人知道怎么做吗 不 你不知道 相信我 你不会 Apple 仍保留 gcc 4 2 1 因为 4 2 2 及更高版本使用 GPLv3 这意味着他们必须放弃对其平台的控制 对于 i
  • 将完整模板参数值映射到原始类型

    我想将数字映射到类型 在这个例子中 我将创建一个函数 将 sizeof 结果映射到有符号的原始类型 我想知道是否有更好的方法来完成我在现代 C 中所做的事情 即采用模板化值并将其转换为类型 现在 这可以将大小转换为已知类型 但我似乎无法在标
  • 是否存在指向不同类型的指针具有不同大小的平台?

    C 标准允许指向不同类型的指针具有不同的大小 例如sizeof char sizeof int 是允许的 但是 它确实要求如果将指针转换为void 然后转换回其原始类型 它必须与其原始值进行比较 因此 从逻辑上来说 sizeof void
  • 在开关中使用“goto”?

    我看到了一个建议的编码标准 内容如下Never use goto unless in a switch statement fall through 我不跟 这个 例外 案例到底是什么样的 这证明了goto 此构造在 C 中是非法的 swi
  • C# 开源 NMEA 解析器 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找 C 开源 NMEA 解析器 嗯 我自己也不熟悉 但是一些快速搜索显示了一个代码项目 htt
  • 增强精神、递归和堆栈溢出

    为什么下面的代码在运行时崩溃 它会给出堆栈溢出错误 include
  • 根据对象变量搜索对象列表

    我有一个对象列表 这些对象具有三个变量 ID 名称和值 这个列表中可能有很多对象 我需要根据ID或Name找到一个对象 并更改值 例子 class objec public string Name public int UID public
  • 如何对 NServiceBus.Configure.WithWeb() 进行单元测试?

    我正在构建一个 WCF 服务 该服务接收外部 IP 上的请求并将其转换为通过 NServiceBus 发送的消息 我的单元测试之一调用Global Application Start 它执行应用程序的配置 然后尝试将 Web 服务解析为 验
  • 析构函数中的异步操作

    尝试在类析构函数中运行异步操作失败 这是代码 public class Executor public static void Main var c1 new Class1 c1 DoSomething public class Class
  • 搜索实体的所有字段

    我正在尝试在客户数据库上实现 多功能框 类型的搜索 其中单个查询应尝试匹配客户的任何属性 这是一些示例数据来说明我想要实现的目标 FirstName LastName PhoneNumber ZipCode Mary Jane 12345
  • 引用/指针失效到底是什么?

    我找不到任何定义指针 引用无效在标准中 我问这个问题是因为我刚刚发现 C 11 禁止字符串的写时复制 COW 据我了解 如果应用了 COW 那么p仍然是一个有效的指针并且r以下命令后的有效参考 std string s abc std st
  • 为什么 Cdecl 调用在“标准”P/Invoke 约定中经常不匹配?

    我正在开发一个相当大的代码库 其中 C 功能是从 C P Invoked 的 我们的代码库中有很多调用 例如 C extern C int stdcall InvokedFunction int 使用相应的 C DllImport CPlu
  • Project Euler #8,我不明白我哪里出了问题[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在做项目欧拉第八题 https projecteuler net problem 8 其中我得到了这个大得离谱的数字 7316
  • 使用 GCC 生成可读的程序集?

    我想知道如何使用GCC http en wikipedia org wiki GNU Compiler Collection在我的 C 源文件中转储机器代码的助记符版本 这样我就可以看到我的代码被编译成什么 你可以使用 Java 来做到这一
  • 如何从 Rx Subscribe 回调异步函数?

    我想回调 Rx 订阅中的异步函数 例如 像那样 public class Consumer private readonly Service service new Service public ReplaySubject
  • 英文日期差异

    接近重复 如何计算相对时间 https stackoverflow com questions 11 how do i calculate relative time 如何在 C 中计算某人的年龄 https stackoverflow c
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • 在 C#.NET 中安全删除文件

    在我正在做的一个项目中 我想为用户提供 安全 删除文件的选项 例如 用随机位或 0 覆盖它 在 C NET 中是否有一种简单的方法可以做到这一点 效果如何 你可以调用系统内部删除 http technet microsoft com en
  • 如何使用placement new重新初始化该字段?

    我的课程包含字段 private OrderUpdate curOrderUpdate 我一遍又一遍地使用它 经常需要重新初始化 for int i 0 i lt entries size i auto entry entries i ne

随机推荐

  • 从二进制文件存储/加载 numpy 数组

    我想从二进制文件存储和加载 numpy 数组 为此 我创建了两个小函数 每个二进制文件应包含给定矩阵的维数 def saveArrayToFile data fileName with open fileName w as file a a
  • 我们可以从函数中按值返回具有已删除/私有复制/移动构造函数的对象吗?

    在 C 03 中 不可能按值返回具有私有非定义复制构造函数的类的对象 struct A A int x private A A const A f return A 10 error return 10 error too 我想知道 C 1
  • 使用 jsoncpp 迭代 JSON 对象数组

    我有一个 JSON 对象数组 例如 jsonArr 如下所示 attr1 somevalue attr2 someothervalue attr1 yetanothervalue attr2 andsoon 使用 jsoncpp 我尝试迭代
  • TWRequest 泄露?

    我在 ios5 中使用 Request 但 Leaks 报告 Request 内存泄漏 我正在做这样的事情 我是不是哪里出错了 TWRequest postRequest TWRequest alloc initWithURL NSURL
  • 无法将类型“float”隐式转换为“int”

    当我尝试运行以下代码时 出现错误 无法将类型 float 隐式转换为 int 我做了很多搜索 遗憾的是我无法找到针对此类错误的任何帮助 int sum1 cols rows float h twoEnds x sum1 h cols x t
  • android System.loadLibrary 加载文件的位置

    网上的一些文章告诉我System loadLibrary 将加载文件 data data app package 目录 我想知道这是否因每个供应商的实施而异或固定 最终由供应商来定义文件系统 文件系统布局 所以它可能在不同的地方 如果没有自
  • Html-loader + file-loader 未捆绑正确的图像源

    我计划在一个项目中使用 Webpack 并使用 Html loader file loader 设置我的工作流程 以获取带有图像动态 src 的生产 html 文件 正如 Colt Steele 所教的那样 这是我的 src 文件 索引 h
  • 如果程序的一部分表现出未定义的行为,它会影响程序的其余部分吗?

    假设程序员忘记初始化他的一个自动变量 并且他使用了它的值 从而调用了未定义的行为 int i 0 j printf value of j d n j char buf 256 fputs Enter query stdout fgets b
  • nvlink、可重定位设备代码和静态设备库

    在调查可重定位设备代码的一些问题时 我偶然发现了一些我不太理解的东西 这是如图所示的用例slide 6 http on demand gputechconf com gtc express 2012 presentations gpu ob
  • 无法使用 rarfile 模块提取 RAR 存档

    我一直在尝试制作一个提取 rar 文件的脚本 但收到错误 我一直在努力理解该模块的文档 但无济于事 我是编程新手 所以有时会迷失在所有文档中 这是我的代码的相关部分以及收到的错误 我的代码片段 import rarfile rarpath
  • 我可以在 Flutter 中使用自定义环境变量吗?

    我想以与我的同事不同的方式配置我们的日志库 并且我不想冒险检查我的本地配置 即 void main LOG minLevel Logger VERBOSE LOG showSymbols false runApp RestartWidget
  • 如何检测文本中的源代码?

    是否可以检测文本中的编程语言源代码 主要是 Java 和 C 例如我想知道本文中是否有源代码部分 text text text text text text text text text text text text text text t
  • 理解Java中的继承和抽象类

    好吧 我通过谷歌搜索寻找文档 但是我没有找到任何真正描述我想要回答的内容 所以我在这里问你们 所以我得到了继承 以及它是如何工作的 我遇到的问题是有时我看到一个对象最初定义为一种类型 然后设置为不同的类型 但我不明白到底发生了什么 这是一个
  • python 找到两个numpy数组的交点

    我有两个描述空间曲线的 numpy 数组 它们在一个点上相交 我想在两个数组中找到该交点的最近值 我有这段代码可以正常工作 但对于大量点来说它会变慢 from scipy import spatial def nearest arr0 ar
  • 在模板文字中使用条件语句

    我知道有更优雅的方法来定义包含变量的字符串 但如果我想在 ES6 之前添加一个条件 我会这样做 var a text conditional a b more text 现在使用模板文字我会做 let a if conditional a
  • 线程上的 Clojure 错误:java.lang.IllegalArgumentException:键必须是整数

    我对两件事感到困惑 一 错误消息本身 第二 这段代码启动了如此多的线程 我本以为它会启动 2 或 3 个线程来响应单个请求 但是当我在本地主机上运行它并将浏览器指向它 仅一次 时 它会启动 40 个线程 诚然 我使用的是 Chrome 它在
  • 我想在 JavaDoc 中添加 JavaScript

    div class en Documentation in English div div class nl Documentatie in Nederlands div public void myFunction 随后编辑 JavaDo
  • QT:qmake 无法识别 3dcore、3drender

    我在用qmake编译我的QT项目 在我的 pro文件我有一行 QT 3dcore 3drender 3dinput 3dextras 执行时qmake myprofile pro我收到错误 Project ERROR Unknown mod
  • Clojure deftype 中的可变字段?

    我正在尝试 Clojure 1 2 特别是受支持的可变字段deftype根据clojure org 文档 http clojure org datatypes 但我无法让装置工作 更新字段的语法是什么 或者可变性还没有实现吗 definte
  • 通过 XAML 绑定将自定义对象传递给 UserControl

    我想要做的是创建一个 UserControl 我可以向其传递一个 Address 对象 似乎当我经过Address Binding Path Person Address 到 UserControl 嵌入的 TextBox 绑定到Text