0

我使用可编辑标签控件(带有覆盖模板属性的标签;您在此处看到的完整代码: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}" />

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

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

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

我的错误在哪里?感谢您的回答,并为我糟糕的英语感到抱歉。

4

1 回答 1

1

也许您可以尝试将 设置UpdateSourceTriggerPropertyChanged,这应该会在文本框属性更改时更新您的标签。

例子:

    <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));
            }
        }
    }
于 2012-12-22T03:23:14.387 回答