为什么我的 WinForms 文本框不能绑定?

Why Can't Won't My WinForms Textbox bind?

基本上,我想在我的 xaml 中用我的 c# 中的变量 DisplayNumFilter 绑定一个文本框。我想将我的文本框初始化为 20。我一直在查看几个堆栈溢出帖子并尝试了很多东西,这是构造函数有点乱(我尝试了很多东西但只是把它们留在那里)。但是,没有任何效果。对于格式或术语方面的任何错误,我深表歉意,我对此还是很陌生。

这是我的 xaml 的片段:

<TextBox Name = "NumAccounts"
         Text="{Binding Path = DisplayNumFilter, Mode=TwoWay}" />


这是我的 C# 代码片段:

private string _displayNumFilter;

public string DisplayNumFilter{
get => _displayNimFilter;
set{
_displayNumFilter = value;
OnPropertyChanged("DisplayNumFilter");
}
}

public event PropertyChangedEventHandler PropertyChanged;

protected void OnPropertyChanged(string propertyName){
  PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

public constructor(){ //it has a different name, I just use this as an example
   DisplayNumFilter = "20";
   InitializeComponent();
   Binding binding = new Binding();
   binding.Path = new PropertyPath("DisplayNumFilter");
   binding.Source = NumAccounts;
   BindingOperations.SetBinding(NumAccounts, TextBox.TextPoperty, binding);
   NumAccounts.Text = DisplayNumFilter;
}

您的代码存在一些问题,但我会重点解决主要问题:

您的绑定源错误。从那个绑定源开始,它将以 属性 路径开始。要解决 属性 DisplayNumFilter 源必须设置为 this.

public SomeWindow()
{ 
   DisplayNumFilter = "20";
   InitializeComponent();
   Binding binding = new Binding();
   binding.Path = new PropertyPath("DisplayNumFilter");

   binding.Source = this; // -> was before NumAccounts;

   BindingOperations.SetBinding(NumAccounts, TextBox.TextPoperty, binding);
   NumAccounts.Text = DisplayNumFilter;
}

XAML 标记 Text="{Binding Path=DisplayNumFilter}" 尝试绑定到 TextBox 控件的当前 DataContextDisplayNumFilter,因此您需要设置 DataContext 到定义了 DisplayNumFilter 的 class 实例。

这意味着您的构造函数应如下所示:

public constructor() {
   DisplayNumFilter = "20";
   InitializeComponent();
   DataContext = this;
}

如果您在 XAML 标记中使用设置绑定,则没有理由以编程方式创建 Binding 对象。