0

クラス プロパティがテキスト ボックスのテキスト プロパティに双方向でバインドされている場合、テキスト ボックス内のテキストを変更すると、クラスの "PropertyChanged" イベントが発生するはずですか? 私の場合は違います。テキスト ボックスの内容を変更しても、メッセージ ボックスは表示されません。ただし、プロパティが変更されるとテキストボックスが変更され、その逆も同様です。

編集:テキストボックスがフォーカスを失った場合にのみ、それが起動することに気付きました。私は、この行動の背後にある理由があるに違いないと思います。

コード:

    public class BaselineAreas : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        private double _Impervious = 0;
        public double Impervious
        {
            get { return _Impervious; }
            set
            {
                if (value != this._Impervious)
                {
                    _Impervious = value;
                    NotifyPropertyChanged("Impervious");
                }
            }
        }
        private double _Pervious = 0;
        public double Pervious
        {
            get { return _Pervious; }
            set
            {
                if (value != this._Pervious)
                {
                    _Pervious = value;
                    NotifyPropertyChanged("Pervious");
                }
            }
        }
        public void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }

    private BaselineAreas baselineAreas = new BaselineAreas();

    public MainPage()
    {
        InitializeComponent();

        baselineAreas.Impervious = 100;
        baselineAreas.Pervious = 500;
        textBoxTotalImperviousArea.DataContext = baselineAreas;
        textBoxTotalPerviousArea.DataContext = baselineAreas;
        baselineAreas.PropertyChanged += new PropertyChangedEventHandler(baselineAreas_PropertyChanged);
    }

    void baselineAreas_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        MessageBox.Show(baselineAreas.Impervious.ToString());
    }

Xaml:

                <TextBox Height="23" HorizontalAlignment="Left" Margin="138,16,0,0" Name="textBoxTotalImperviousArea" VerticalAlignment="Top" Width="62" 
                         Text="{Binding Impervious, Mode=TwoWay}"/>
                <TextBox Height="23" HorizontalAlignment="Right" Margin="0,45,226,0" Name="textBoxTotalPerviousArea" VerticalAlignment="Top" Width="62" 
                         Text="{Binding Pervious, Mode=TwoWay}"/> 
4

1 に答える 1

0

XAML でテキスト ボックスに動作を与えて、文字が変更されるたびに更新されるようにすることができます。

http://dotneteers.net/blogs/vbandi/archive/2009/12/24/make-a-silverlight-textbox-update-its-binding-on-every-character.aspx

于 2013-04-06T09:30:59.853 に答える