c# - 为什么数据绑定在 UserControl 上不起作用?
问题描述
我正在尝试在 WPF/C# 中创建一个简单的用户控件。除了数据绑定到数据上下文中的属性之外,一切似乎都有效。
我尝试制作极其简化的示例,以更好地了解我做错了什么。一般来说,我对 WPF 很陌生,所以我认为我在某种程度上做错了依赖属性。可能在绑定本身中,但对于其他元素(如 TextBox)正常工作。这似乎是类似的问题,但在我的情况下答案似乎不起作用:Why DataBinding is not propagating to UserControl
MainWindow.xaml(省略根标记)
<StackPanel>
<local:UserControl1 TextToDisplay="{Binding BoundableText}" />
<TextBlock Text="{Binding BoundableText}" />
</StackPanel>
UserControl1.xaml(省略根标记)
<TextBlock Text="{Binding TextToDisplay}" />
MainWindow.xaml.cs:
using System.Windows;
using System.Windows.Controls;
namespace UserControlTest
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
BoundableText = "This text is bound";
}
public string BoundableText { get; set; }
}
public partial class UserControl1 : UserControl
{
public static readonly DependencyProperty TextToDisplayProperty =
DependencyProperty.Register(nameof(TextToDisplay), typeof(string), typeof(UserControl1), new PropertyMetadata("Default text"));
public string TextToDisplay
{
get => (string)GetValue(TextToDisplayProperty);
set => SetValue(TextToDisplayProperty, value);
}
public UserControl1()
{
InitializeComponent();
DataContext = this;
}
}
}
这两个元素的内容也应该相同,显示在代码隐藏中设置的文本(“此文本已绑定”)。TextBox 可以正常工作,但 UserControl1 只有默认文本。这个案例与第一个案例有何不同?我可以让它同样工作吗?注意:我还尝试绑定到其他元素的属性,效果很好。也可以从代码隐藏中绑定。但是,这应该可以从 xaml 本身实现。在实际用例中,控件将位于 DataTemplate 中。
解决方案
不要在构造函数中将 of 设置DataContext
为UserControl
自身:
DataContext = this;
然后它不会DataContext
从父窗口继承。
要绑定到 中的TextToDisplay
依赖属性UserControl
,您可以使用RelativeSource
:
<TextBlock Text="{Binding TextToDisplay, RelativeSource={RelativeSource AncestorType=UserControl}}" />
推荐阅读
- facebook - 通过 FACEBOOK GRAPH API 创建 AdSet 时如何定位所有 65 岁以上的人群?
- javascript - 如何将我的函数结果存储在 JS 的父变量中?
- java - 按钮通过电话以不同方式显示位置
- xaml - Carouselview:如果只有一个项目在视图中,项目将无限显示
- python - 如何检测是否在 pytorch 中触发了回调?
- python - Why plt.savefig reduced the original size of an image?
- java - 如何在 HTML 页面上显示 PDF
- selenium - 超时异常不起作用,元素不可交互硒
- javascript - 这是将类组件转换为钩子组件的最佳方法吗?
- java - 如何在 Java swing 中用 ImageIcon 填充形状?