Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串变量绑定到标签_C#_Wpf - Fatal编程技术网

C# 将字符串变量绑定到标签

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

我正试图从WinForms转移到WPF,但我被绑定卡住了

我有一个标签:

    <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更改主线程中的变量,同时保留在单独的线程中。