我想使用绑定从文本框填充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}"/>
表单加载时填充属性。文本框保持为空。我如何填写文本框?
答案 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类(例如视图模型)更常见。在了解绑定时,您可能需要同时研究这两种方法。