C# 将文本框绑定到属性
我想要的是,当用户更改文本框C# 将文本框绑定到属性,c#,wpf,binding,textbox,C#,Wpf,Binding,Textbox,我想要的是,当用户更改文本框alphaMin\u txt中的值时,属性alphaMin会得到更新 代码隐藏: public partial class MainWindow : Window, INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged([CallerMemberName] String
alphaMin\u 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:
这应该是一个重复的100倍,但我已经通过了它的所有,没有一个是布局简单明了的单向更新的源代码。所有MSN教程都将一些UIControl绑定到另一个,这是毫无意义的,因为IntelliSense向您展示了如何做到这一点
指定一个名称,然后将DataContext
绑定更改为{binding ElementName=MyWin}
NotifyPropertyChanged()代码>至<代码>NotifyPropertyChanged(“AlphaMin”)代码>
指定一个名称,然后将DataContext
绑定更改为{binding ElementName=MyWin}
NotifyPropertyChanged()代码>至<代码>NotifyPropertyChanged(“AlphaMin”)代码>
您的
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
的好方法,您的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
的一个好方法,那么,您当前的绑定不起作用了吗?更改此NotifyPropertyChanged()代码>至<代码>NotifyPropertyChanged(“AlphaMin”)代码>检查前一个SO post SO,您当前的绑定不工作?更改此NotifyPropertyChanged()代码>至<代码>NotifyPropertyChanged(“AlphaMin”)代码>检查上一篇文章,使之有效。非常感谢。最后我将其设置为
,其中常量
是我使用的类,而不是主窗口。“我只是觉得它起作用了。@AndrewBenjamin如果您的DataContext不是窗口本身,那么问题应该是DockPanel的DataContext写错了。这意味着它与您将DataContext设置在错误的位置无关<代码>
可能也会起作用。只是说,万一你对问题的理解有误,这可能会导致你将来犯更多的错误。。。当以编程方式设置myTextbox.Text
时,是否存在导致AlphaMin
更新的设置?或者我应该切换到双向,并且只以编程方式更新AlphaMin
?@AndrewBenjamin这不是绑定应该做的吗?当我执行AlphaMin\u txt.Text=“1.1”
,在我再次开始在文本框中键入之前,AlphaMin
永远不会更新。如果装订部能处理好这件事就好了。也许这是我的设置之一。这很有效。非常感谢。最后我将其设置为
,其中常量
是我使用的类,而不是主窗口。“我只是觉得它起作用了。@AndrewBenjamin如果您的DataContext不是窗口本身,那么问题应该是DockPanel的DataContext写错了。这意味着它与您将DataContext设置在错误的位置无关<代码>
可能也会起作用。只是说,万一你对问题的理解有误,这可能会导致你将来犯更多的错误。。。当以编程方式设置myTextbox.Text
时,是否存在导致AlphaMin
更新的设置?或者我应该切换到双向,并且只以编程方式更新AlphaMin
?@AndrewBenjamin这不是绑定应该做的吗?当我执行AlphaMin\u txt.Text=“1.1”
,在我再次开始在文本框中键入之前,AlphaMin
永远不会更新。如果装订部能处理好这件事就好了。也许这是我的设置之一。我想这也会起作用。但是,我不必指定“AlphaMin”
,因为我已默认为[CallerMemberName]
。我认为这也可以。但是,我不必指定“AlphaMin”
,因为我已默认为[CallerMemberName]
。