绑定UpdateSource事件

时间:2012-12-21 20:06:17

标签: wpf data-binding binding

我使用可编辑的标签控件(带有覆盖模板属性的标签;您在那里看到的完整代码:http://www.nathanpjones.com/wp/2012/09/editable-label-in-wpf/)。

我用这种风格创建自己的标签控制类。 EditableLabelControl类扩展了Label类,因此EditableLabelControl具有Content属性。

public partial class EditableLabelControl : Label
{
    //...
}

之后,我将此可编辑标签放在我的自定义控件中,并将其绑定到模型的 MyValue 属性。

<controls:EditableLabelControl Content="{Binding Path=MyValue, Mode=TwoWay}" />

它正确显示模型值,但是当我在文本框中进行编辑时,它仅更新内容属性(模型的 MyValue 属性不会更新)。

我尝试为文本框编写LostFocus处理程序,但它没有帮助。

var bindingExpression = ((TextBox)sender).GetBindingExpression(TextBox.TextProperty);
if (bindingExpression != null)
{
    bindingExpression.UpdateSource();
}

我的错误在哪里?谢谢你的回答,抱歉我的英语不好。

1 个答案:

答案 0 :(得分:1)

也许您可以尝试将UpdateSourceTrigger设置为PropertyChanged,这会在文本框属性发生变化时更新您的标签。

示例:

    <StackPanel>
        <Label Content="{Binding ElementName=UI, Path=MyValue, UpdateSourceTrigger=PropertyChanged}" x:Name="label"/>
        <TextBox Text="{Binding ElementName=UI, Path=MyValue, UpdateSourceTrigger=PropertyChanged}" x:Name="textbox" />
    </StackPanel>

代码:

    public partial class EditableLabelControl : Label, INotifyPropertyChanged
    {
        private string _myValue;
        public string MyValue
        {
            get { return _myValue; }
            set { _myValue = value; NotifyPropertyChanged("MyValue"); }
        }


        public event PropertyChangedEventHandler PropertyChanged;
        /// <summary>
        /// Notifies the property changed.
        /// </summary>
        /// <param name="property">The info.</param>
        public void NotifyPropertyChanged(string property)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(property));
            }
        }
    }