我使用可编辑的标签控件(带有覆盖模板属性的标签;您在那里看到的完整代码: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();
}
我的错误在哪里?谢谢你的回答,抱歉我的英语不好。
答案 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));
}
}
}