将 TextBlock 值绑定到对象

Bind TextBlock Value to Object

我已经创建了自己的套接字 class 并在 MainWindow.xaml.cs 中创建了一个实例,我想创建一个小的 TextBlock 来监视连接状态。我一直在使用这个特定的 link:WPF textblock binding in XAML

这是代码尝试。 ComUplink.cs:

    public class ComUplink
    {
        public String ConnectionStatus = "Idle";
        public Socket Socklink;
    }

在MainWindow.xaml.cs中:

    public partial class MainWindow : Window
    {
        ComUpLink Uplink;
        ...
        public void Login_Click(object Sender, RoutedEventArgs e)
        {
           Uplink = new ComUpLink();
        }
    }

AND 在 XAML 文件中:

<TextBlock x:Name="textBlock3" 
    TextAlignment="Right" 
    HorizontalAlignment="Left" 
    Margin="12,218,0,0" 
    TextWrapping="Wrap" 
    Text="{Binding Path=Uplink.ConnectionString}" 
    VerticalAlignment="Top" 
    Foreground="#616161" 
    Width="236"/>

所以,我的问题是,为什么绑定不正确?我是否缺少 INotifyPropertyChanged 的​​实现?

您首先需要将文本块的数据上下文设置为主 window 或一个 属性。 其次,您需要绑定到 public 属性 而不是字段

嗯,你犯了三个小错误:

  1. 您只能绑定到属性(如果这些值更改使用 INotifyPropertyChanged)
  2. 您需要设置 DataContext
  3. 您的绑定使用了错误的 属性 名称(ConnectionString 而不是 ConnectionStatus)

尝试这些修改:

在MainWindow.xaml.cs中:

public void Login_Click(object Sender, RoutedEventArgs e)
{
   this.DataContext = new ComUpLink();
}

在ComUplink.cs中:

public class ComUplink : INotifyPropertyChanged
{
    private String connectionStatus = "Idle";
    public String ConnectionStatus
    {
        get
        {
            return this.connectionStatus;
        }
        set
        {
            this.connectionStatus = value;
            this.OnPropertyChanged();
        }
    }

    private void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public Socket Socklink;
}

在MainWindow.xaml中:

<TextBlock x:Name="textBlock3" 
TextAlignment="Right" 
HorizontalAlignment="Left" 
Margin="12,218,0,0" 
TextWrapping="Wrap" 
Text="{Binding Path=ConnectionStatus}" 
VerticalAlignment="Top" 
Foreground="#616161" 
Width="236"/>