为什么我的 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
控件的当前 DataContext
的 DisplayNumFilter
,因此您需要设置 DataContext
到定义了 DisplayNumFilter
的 class 实例。
这意味着您的构造函数应如下所示:
public constructor() {
DisplayNumFilter = "20";
InitializeComponent();
DataContext = this;
}
如果您在 XAML 标记中使用设置绑定,则没有理由以编程方式创建 Binding
对象。
基本上,我想在我的 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
控件的当前 DataContext
的 DisplayNumFilter
,因此您需要设置 DataContext
到定义了 DisplayNumFilter
的 class 实例。
这意味着您的构造函数应如下所示:
public constructor() {
DisplayNumFilter = "20";
InitializeComponent();
DataContext = this;
}
如果您在 XAML 标记中使用设置绑定,则没有理由以编程方式创建 Binding
对象。