我是WPF和数据绑定的新手。所以我正在尝试一些东西,但现在遇到了一个问题,违背了我在参考资料中找到的一切。
我有一个测试程序,它包含一个字符串TestString 1,该字符串绑定到TextBox tbTest 1的Text属性,该测试程序可以正常工作。
我有一个来自ClassTestString 2的对象TestString 2,它包含一个属性Str。我想将Str绑定到TextBox tbTest 2的Text属性。所以我使用Text="{Binding Path=TestString2.Str}"。根据所有文档,您可以使用正常的C#语法深入到对象的属性。但它根本无法绑定。当启动程序时它不会显示,并且在tbTest 2中所做的更改也不会反映在TestString2.str中。
当我使用这个.DataContext = TestString 2;并且文本="{绑定路径=Str}",则它工作,但是不再绑定TestString 1。
下面是一段简单的XAML代码:
<Window x:Class="WpfBindingStringOnly.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfBindingStringOnly"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<TextBox
x:Name="tbTest1"
Text="{Binding Path=TestString1}"
HorizontalAlignment="Left" Height="41"
Margin="124,47,0,0" TextWrapping="Wrap"
VerticalAlignment="Top" Width="250"/>
<TextBox
x:Name="tbTest2"
Text="{Binding Path=TestString2.Str}"
HorizontalAlignment="Left" Height="45"
Margin="124,126,0,0" TextWrapping="Wrap"
VerticalAlignment="Top" Width="250"/>
</Grid>
</Window>
和C#代码背后:
using System;
using System.Windows;
using static WpfBindingStringOnly.MainWindow;
namespace WpfBindingStringOnly
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public string TestString1 { get; set; }
public class ClassTestString2
{
public string Str { get; set; }
public ClassTestString2(string s)
{
Str = s;
}
}
public ClassTestString2 TestString2;
public MainWindow()
{
TestString1 = "Hello1";
TestString2 = new("Hello2");
InitializeComponent();
this.DataContext = this;
}
}
}
1条答案
按热度按时间inb24sb21#
绑定作用于属性,而不是字段。
将您的
TestString2
成员从至