绑定到XAML中对象的属性无效

vom3gejh  于 2022-12-16  发布在  其他
关注(0)|答案(1)|浏览(159)

我是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;
        }
    }
}
inb24sb2

inb24sb21#

绑定作用于属性,而不是字段。
将您的TestString2成员从

public ClassTestString2 TestString2; // This is a field.

public ClassTestString2 TestString2 { get; set; } // This is a property.

相关问题