我知道有很多类似的问题,我在过去一天左右阅读了很多,但似乎没有一个解决方案对我有帮助。
我有一个 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 电报机器人中发送消息之间添加暂停?