将文本框绑定到属性
本文关键字:属性 绑定 文本 | 更新日期: 2023-09-27 17:52:17
我想要的是当用户改变文本框alphaMin_txt
的值时,属性AlphaMin
得到更新。
背后的代码:
public partial class MainWindow : Window, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
private string _alphaMin;
public string AlphaMin
{
get { return _alphaMin; }
set
{
if (value != _alphaMin)
{
_alphaMin = value;
NotifyPropertyChanged();
}
}
}
}
XAML:
<DockPanel DataContext="{Binding MainWindow}">
<TextBox Text="{Binding
Path=AlphaMin,
NotifyOnTargetUpdated=True,
Mode=OneWayToSource,
UpdateSourceTrigger=PropertyChanged}" />
</DockPanel>
这应该是一百次的重复,但我已经通过了它,没有一个是简单的布局为这个单向更新的源。所有的MSN教程都将一些UIControl绑定到另一个,这是毫无意义的,因为IntelliSense告诉你如何做到这一点。
您的DockPanel
可能有错误的DataContext
绑定。DataContext应该在窗口级别设置。
<Window ... DataContext="{Binding RelativeSource={RelativeSource Self}}" ..>
当然,这是假设你的XAML是MainWindow.xaml.
如果你对主窗口的其余部分有不同的DataContext,那么你可以这样做:
<TextBox Text="{Binding
RelativeSource={RelativeSource AncestorType=Window},
Path=AlphaMin,
NotifyOnTargetUpdated=True,
Mode=OneWayToSource,
UpdateSourceTrigger=PropertyChanged}" />
当然,你应该删除DockPanel的DataContext。
后面的代码是正确的;不需要任何更改。使用CallerMemberName
是实现INotifyPropertyChanged
的好方法。
-
为
<Window x:Name="MyWin"...>
指定一个名称,然后将DataContext
绑定为{Binding ElementName=MyWin}
-
将
NotifyPropertyChanged();
更改为NotifyPropertyChanged("AlphaMin");