WPF 链绑定

2024-01-01

我想创建一个像这样的链绑定:我有一个用户控件,在具有类似依赖属性的窗口内具有依赖属性。我想将用户控件的依赖属性绑定到窗口的依赖属性。

我创建了一个示例项目来演示我的问题:

用户控件1 XAML:

<UserControl x:Class="WpfApplication1.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d"
             d:DesignHeight="300" d:DesignWidth="300" DataContext="{Binding RelativeSource={RelativeSource Self}}">
    <Grid>
        <Label Content="{Binding Caption}"/>
    </Grid>
</UserControl>

用户控件1 C#:

public partial class UserControl1 : UserControl
  {
    public static readonly DependencyProperty CaptionProperty = DependencyProperty.Register("Caption", typeof(string), typeof(UserControl1));
    public string Caption
    {
      get { return (string)GetValue(CaptionProperty); }
      set { SetValue(CaptionProperty, value); }
    }

    public UserControl1()
    {
      InitializeComponent();
    }
  }

主窗口 XAML:

<Window xmlns:WpfApplication1="clr-namespace:WpfApplication1"  x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" DataContext="{Binding RelativeSource={RelativeSource Self}}">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Label Content="{Binding Caption, Mode=OneWay}"/>
        <WpfApplication1:UserControl1 x:Name="uc" Caption="{Binding Caption, Mode=OneWay}"  Grid.Row="1"/>
    </Grid>
</Window>

主窗口 C#:

public partial class MainWindow : Window
  {
    public static readonly DependencyProperty CaptionProperty = DependencyProperty.Register("Caption", typeof(string), typeof(MainWindow));
    public string Caption
    {
      get { return (string)GetValue(CaptionProperty); }
      set { SetValue(CaptionProperty, value); }
    }

    public MainWindow()
    {
      InitializeComponent();
      (new Thread(() => { Thread.Sleep(2000); Dispatcher.Invoke(() => { uc.Caption = "YYY"; Caption = "XXX"; }); })).Start();
    }
  }

问题是,当我将 Caption 设置为(窗口的)“XXX”时,我希望它也通知用户控件并更新其 Caption,但事实并非如此。我想避免附加依赖属性并尽可能避免代码隐藏。有任何想法吗?

感谢您的任何努力。


问题出在你的绑定上。默认情况下,绑定会查找控件的 DataContext 属性上的属性。每个绑定都有一个源,在您的情况下,它是控件的 DataContext 属性。因此您的绑定正在评估 DataContext.Caption。您真正想要的是创建绑定源,即具有 Caption 属性的窗口。因此,如下所示更改代码。我在我的机器上测试了它并且它有效。请记住初始化窗口的 Caption 属性。

new:

<UserControl x:Class="WpfApplication1.UserControl1"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid>
    <Grid>
        <Label Content="{Binding Path=Caption, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl}}"/>
    </Grid>
</Grid>

new:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:current="clr-namespace:WpfApplication1"
    Title="MainWindow" Height="350" Width="525" >
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Label Content="{Binding Caption, Mode=OneWay, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}"/>
    <current:UserControl1 x:Name="uc" Caption="{Binding Path=Caption, Mode=OneWay, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}"  Grid.Row="1"/>
</Grid>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 链绑定 的相关文章

  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • Unix网络编程澄清

    我正在翻阅这本经典书籍Unix网络编程 https rads stackoverflow com amzn click com 0139498761 当我偶然发现这个程序时 第 6 8 节 第 179 180 页 include unp h
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • 未经许可更改内存值

    我有一个二维数组 当我第一次打印数组的数据时 日期打印正确 但其他时候 array last i 的数据从 i 0 到 last 1 显然是一个逻辑错误 但我不明白原因 因为我复制并粘贴了 for 语句 那么 C 更改数据吗 I use g
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable

随机推荐

  • 设置最小密码长度 Firebase 电子邮件和密码身份验证

    使用 Firebase 电子邮件和密码设置时 密码似乎没有安全限制 例如我可以创建以下用户 firebaseRef createUser email email protected cdn cgi l email protection pa
  • 用于生物信息学/生物统计学/医学研究的 Clojure 或 Scala [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我不是一个专业的程序员 我的领域是医学研究 但我对C C 和各种脚本语言相当有能力 不久前我对 Lisp 很感兴趣 但一直没有时间认真学习它 短
  • Django可以自动创建相关的一对一模型吗?

    我在不同的应用程序中有两个模型 ModelA and ModelB 他们有一对一的关系 有没有办法让django自动创建并保存ModelB when ModelA被救了吗 class ModelA models Model name mod
  • 如何在 ASP.NET MVC 中禁用客户端和代理缓存?

    在 ASP NET MVC 中禁用页面缓存的正确 与浏览器无关 方法是什么 尝试这个 OutputCache NoStore true Duration 0 VaryByParam public ActionResult NonCachea
  • Python:Groupby 第一个非 NaN 值

    我有以下数据框 id number 1 13 1 13 1 NaN 1 NaN 2 11 2 11 2 11 2 NaN 我想找到每个 id 的第一个非 NaN 值并用 1 标记它 结果应如下所示 id number code 1 13 N
  • 如何在D3中点击添加或拖动?

    我的印象是这个问题太简单了 没有人费心去制作它的演示 但我对 D3 的了解还不够多 无法看出我做错了什么 我正在寻找的行为是 如果用户单击没有圆圈的地方 它将在那里创建一个圆圈 如果他们拖动现有的圆圈 则不会创建新的圆圈 但他们拖动的圆圈将
  • Firebase - 创建临时用户直到用户注册

    我有一个用例 用户 A 可以说用户 B 从用户 A 借了一些钱 类似于 Splitwise 等应用程序 我正在使用 firestore 来存储数据 在这种特殊情况下 我将其作为文档存储在 Transactions 集合中 该集合将具有以下字
  • CEdit::GetLine() Windows 7

    我有以下代码段 其中m edit是一个 CEdit 控件 TCHAR lpsz MAX PATH 1 get the edit box text m edit GetLine 0 lpsz MAX PATH 这在运行 Windows XP
  • 在 C# 中使用原始套接字

    我想用 C 编写一个端口扫描器 但无法使用 SocketType Raw 因为原始套接字是从 Windows 桌面版本中取出的 我无法使用 SharpPcap 或 Winpcap 的其他包装器 因为我使用 PPPoE 进行互联网连接 而 W
  • 检查奇数时 & 比 % 更快吗?

    要检查奇数和偶数 最低位检查是否比使用模数更有效 gt gt gt def isodd num return num 1 and True or False gt gt gt isodd 10 False gt gt gt isodd 9
  • MySQL 有命名约定吗?

    我是这样做的 表名是小写的 使用下划线分隔单词 并且是单数 例如foo foo bar etc 我通常 并非总是 有一个自动增量 PK 我使用以下约定 tablename id e g foo id foo bar id etc 当表包含作
  • xmlHttpRequest.onerror 处理程序用例

    什么样的情况会导致调用此处理程序 我没有找到此方法引发错误的任何实例 我尝试让设备离线 我得到xmlHttpRequest status 0但没有错误 问题是我可以创建什么样的情况来测试此处理程序的功能 var xmlhttp new XM
  • C++/CLI 中的文字字段与常量变量

    我正在阅读一些 C CLI 材料 并且遇到了文字字段的概念 literal int inchesPerFoot 12 这比 const 更好吗 因为 constFIELD不能存在 因为字段无法初始化自身 所以 class aClass pr
  • 如何通过 Azure DevOps 在 Dockerfile 中设置环境变量

    在我的项目 Docker 文件中 我有一些环境变量 如下所示 ENV ACCEPT EULA Y ENV SA PASSWORD Password ENV MSSQL PID Developer ENV MSSQL TCP PORT 143
  • 在应用程序域之间来回传递集合对象

    以下示例基于 在应用程序域之间来回传递值 https stackoverflow com questions 1250774 passing values back and forth appdomains 其中 Marc Gravell
  • 扩展运算符类似物

    我有一个结构体和该结构体的实例 type Obj struct ssid string code string mit string and other props 23 var ValidObject Obj ssid AK93 KADJ
  • Android 应用程序连接到网络服务 - 不工作

    我正在尝试将我的应用程序连接到我在 asp net 中创建的 WCF 服务 该服务在我的本地计算机上运行 http localhost 8080 Service svc http localhost 8080 Service svc 但由于
  • 批量归一化 - Tensorflow

    我看过一些 BN 的例子 但还是有点困惑 所以我目前正在使用这个函数 它调用这里的函数 https github com tensorflow tensorflow blob master tensorflow g3doc api docs
  • 解压 sys.argv 时 Pylint 误报

    我有一个解压脚本sys argv到一个函数中 像这样 import sys def do something a b It doesn t matter what this function does print a b if name m
  • WPF 链绑定

    我想创建一个像这样的链绑定 我有一个用户控件 在具有类似依赖属性的窗口内具有依赖属性 我想将用户控件的依赖属性绑定到窗口的依赖属性 我创建了一个示例项目来演示我的问题 用户控件1 XAML