数据绑定文本框从属性

时间:2017-09-09 17:52:42

标签: c# wpf

我想使用绑定从文本框填充text属性。 (我第一次尝试绑定)。

我有这个:

public string TestProperty { get; set; }

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    TestProperty = 'Test';
}
xaml中的

<TextBox x:Name="TextBox_Test" HorizontalAlignment="Left" Height="23" Margin="49,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="288" Text="{Binding ElementName=TextBox_Test, Path=TestProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

表单加载时填充属性。文本框保持为空。我如何填写文本框?

1 个答案:

答案 0 :(得分:0)

在此之前你必须解决一些问题。

首先,你的绑定表达不太对劲。您使用TextBox指定绑定源是ElementName。那不对。您的来源实际上应该是Window,因为那是您的财产所在的位置。因此,请为Window提供一个名称,并将ElementName更改为该Window名称。例如..

<TextBox x:Name="TextBox_Test" HorizontalAlignment="Left" Height="23" Margin="49,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="288"
         Text="{Binding ElementName=Window_Test, Path=TestProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

其次,您的Window需要实施INotifyPropertyChanged来更改源上的内容,以反映在目标上。

public partial class MainWindow : Window, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private string _testProperty;

    public string TestProperty
    {
        get { return _testProperty; }
        set
        {
            _testProperty = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("TestProperty"));
        }
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        TestProperty = "Test";
    }

    public MainWindow()
    {
        InitializeComponent();
    }
}

请注意,我修改了类来实现接口,并在属性setter中引发了事件。

通过这些更改,您的绑定将起作用。我应该注意到这种类型的绑定有点不寻常。在这种情况下,Window使用DependencyProperty或者绑定到非UI类(例如视图模型)更常见。在了解绑定时,您可能需要同时研究这两种方法。

Dependency Properties

MVVM Pattern