添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

我知道有很多类似的问题,我在过去一天左右阅读了很多,但似乎没有一个解决方案对我有帮助。

我有一个 WPF 用户控件,基本上是一个加强版 ComboBox ,我想在其上启用数据绑定。我遵循了 这个 SO question 的接受答案中显示的代码,但绑定不起作用。

用户控件内容的精简版如下...

<UserControl x:Class="Sample.MyComboBox"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ComboBox Name="EntityTb"
              IsEditable="True" />
</UserControl>

显然还有很多,但其余的与我的问题无关。

在代码隐藏中,我添加了一个名为Text如下的依赖属性...

public static readonly DependencyProperty TextProperty
         = DependencyProperty.Register("Text", typeof(string),
  typeof(MyComboBox), new FrameworkPropertyMetadata() {
    BindsTwoWayByDefault = true,
    PropertyChangedCallback = TextChanged,
    DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
private static void TextChanged(DependencyObject d,
                             DependencyPropertyChangedEventArgs e) {
  MyComboBox cmb = (MyComboBox)d;
  cmb.EntityTb.Text = e.NewValue.ToString();
public string Text {
  get => (string)GetValue(TextProperty);
  set => SetValue(TextProperty, value);

然后我尝试在 WPF 窗口上使用它。视图模型有一个Customer属性,它有一个Name我想绑定到自定义控件的属性...

<controls:MyComboBox Grid.Column="1"
     Text="{Binding Customer.Name, Mode=TwoWay}" />

Customer属性没有什么比...更复杂的了

private Customer _customer;
public Customer Customer {
  get => _customer;
  set {
    if (_customer != value) {
      _customer = value;
      RaisePropertyChanged();

...并且Customer类型本身只是一个普通的 C# 类...

public partial class Customer {
  public string Name { get; set; }

然而什么也没有发生。当窗口加载时,客户名称不会显示在组合框中,如果我在其中键入任何内容,则模型不会更新。

我做了很多搜索,所有代码示例看起来都像上面的那个。谁能告诉我我做错了什么?

标签: c#wpfxamldependency-properties

<ComboBox IsEditable="True"
    Text="{Binding Text, RelativeSource={RelativeSource AncestorType=UserControl}}"/>

由于该ComboBox.Text属性默认也是双向绑定的,因此设置Mode=TwoWay是多余的。

  • laravel - 从 ionic 3 浏览器测试转移到 Ionic DevApp & Mobile 测试
  • r - blogdown::serve() 多次重建 .rmd 文件
  • c - 用定点算法计算浮点数的乘积
  • project-server - Project Server PWA - 查找召回的时间表
  • angularjs - stateProvider 不会加载所有组件
  • git - 如何使用 git 子模块
  • android - RxJava 中的文件操作导致 Android 中的文件描述符泄漏
  • python - 试图消除python代码中的类型模块
  • python - 如何在远程连接的服务器上调用方法
  • python - 如何在 python 电报机器人中发送消息之间添加暂停?
  •