除非选中,否则数据绑定文本框不会更新

时间:2013-12-04 11:14:41

标签: c# wpf data-binding

我有一个静态单例类,其中包含用于将文本框数据化为。

的属性
using System.ComponentModel;

namespace Masca
{
    public class logged : INotifyPropertyChanged
    {    
        public static logged instance = new logged();
        public static logged Instance
        {
            get { return instance; }
        }

        private string alisa;
        public string aliasname
        {
            get { return alisa; }
            set
            {
                alisa = value;
                RaisePropertyChanged("aliasname");
            }
        }

        private string mail;
        public string emailadd
        {
            get { return mail; }
            set
            {
                mail = value;
                RaisePropertyChanged("emailadd");
            }
        }

        private void RaisePropertyChanged(string prop)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged (this, new PropertyChangedEventArgs(prop));
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
    }
}

这是属性访问方法:

loggedin.Instance.emailadd = "email.text";

这是我在我希望访问该属性的所有其他页面的初始化组件中放置的datacontext:

DataContext = loggedin.Instance;

这是绑定TextBox的XAML代码

<TextBox x:Name="email" Text="{Binding emailadd}" Height="19" VerticalAlignment="Top" HorizontalAlignment="Left" Width="211" FontSize="11" Margin="134,417,0,0"/>

<TextBox x:Name="mail" Text="{Binding emailadd}" Height="19" VerticalAlignment="Top" HorizontalAlignment="Left" Width="211" FontSize="11" Margin="134,435,0,0"/>

问题在于,如果我在email.text中输入内容,mail.text只会在mail.text中点击后反映email.text中的内容。

非常感谢帮助。

2 个答案:

答案 0 :(得分:2)

尝试设置UpdateSouceTrigger

<TextBox x:Name="email" Text="{Binding emailadd, 
                               UpdateSourceTrigger=PropertyChanged, 
                               Mode=TwoWay}" />

请注意UpdateSourceTrigger的{​​{1}}默认值为TextBox.Text,而许多其他属性的默认值为LostFocus

答案 1 :(得分:2)

如果您尝试触发每个击键的绑定,则需要设置UpdateSourceTrigger

<TextBox Name="itemNameTextBox"
    Text="{Binding Path=ItemName, UpdateSourceTrigger=PropertyChanged}" />

这个SO答案描述了一些更多场景(例如过滤按下的键) Bind TextBox on Enter-key press