C# 将字符串变量绑定到标签
我正试图从WinForms转移到WPF,但我被绑定卡住了 我有一个标签:C# 将字符串变量绑定到标签,c#,wpf,C#,Wpf,我正试图从WinForms转移到WPF,但我被绑定卡住了 我有一个标签: <Label Name="labelState" Content="{Binding state}" HorizontalAlignment="Right" Margin="10,10,10,10" FontSize="12" /> 为什么这样不行 谢谢。在WPF中绑定某些内容时,您需要使用INotifyPropertyChanged public FormInput() { Initializ
<Label Name="labelState" Content="{Binding state}" HorizontalAlignment="Right" Margin="10,10,10,10" FontSize="12" />
为什么这样不行
谢谢。在WPF中绑定某些内容时,您需要使用INotifyPropertyChanged
public FormInput()
{
InitializeComponent();
TestObject t = new TestObject();
labelState.DataContext = t;
t.State = "ok";
}
实现一个如下的类:
class TestObject : INotifyPropertyChanged
{
private string _state;
public string State
{
get
{
return _state;
}
set
{
if (_state == value) return;
_state = value;
OnPropertyChanged("State");
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
<Label Name="labelState" Content="{Binding State}" HorizontalAlignment="Right" >
在您的表单输入中
public FormInput()
{
InitializeComponent();
TestObject t = new TestObject();
labelState.DataContext = t;
t.State = "ok";
}
和XAML如下所示
class TestObject : INotifyPropertyChanged
{
private string _state;
public string State
{
get
{
return _state;
}
set
{
if (_state == value) return;
_state = value;
OnPropertyChanged("State");
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
<Label Name="labelState" Content="{Binding State}" HorizontalAlignment="Right" >
这将不起作用,因为状态没有依赖项属性或INotifyPropertyChanged模式。因此,更改在初始化后不会传播。但是InitializeComponent应该采用初始状态“state”,我在初始化之后移动了它,但是标签仍然没有更新。另外,如果我想将这个标签更新为变量更新,这会起作用吗?或者我需要补充什么?啊,我明白了。知道了。非常感谢你!您可以将INotify接口添加到userControl,而不是添加到新类,并将TestObject中的所有代码移动到userControl。然后,您可以将DataContext设置为“this”,而不是TestObject实例。状态现在将在它发生更改时通知Gui。关于安全;我只知道依赖属性不能很好地处理线程。我从未在这方面测试过INotify。如果它不起作用,您可以使用Dispatcher更改主线程中的变量,同时保留在单独的线程中。