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]