将 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 属性 而不是字段
嗯,你犯了三个小错误:
- 您只能绑定到属性(如果这些值更改使用 INotifyPropertyChanged)
- 您需要设置 DataContext
- 您的绑定使用了错误的 属性 名称(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"/>
我已经创建了自己的套接字 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 属性 而不是字段
嗯,你犯了三个小错误:
- 您只能绑定到属性(如果这些值更改使用 INotifyPropertyChanged)
- 您需要设置 DataContext
- 您的绑定使用了错误的 属性 名称(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"/>