基本上,我如何将(单向)绑定到名为txtFullName的文本框。最初,由于ToString返回“”,文本框中的任何文本都会被清除/消隐。但是,当我对FirstName或LastName进行更改时,它不会更新对FullName的绑定。有什么办法吗?
此外,有没有办法绑定到一个方法(而不仅仅是一个字段)?也就是说,直接将绑定设置为ToString()方法,并在FirstName或LastName更改时更新它?
哦,如果有某种通用的处理方式,那将会非常棒......就像FullName字段上的属性或ToString方法上的属性一样,告诉它要查找哪些属性进行更改。 / p>
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Text;
using System.Windows;
using System.Windows.Controls;
namespace AdvancedDataBinding
{
public class UserEntity
{
static UserEntity()
{
FirstNameProperty = DependencyProperty.Register("FirstName", typeof(String), typeof(UserEntity));
LastNameProperty = DependencyProperty.Register("LastName", typeof(String), typeof(UserEntity));
}
public String FirstName
{
get { return (String)GetValue(FirstNameProperty); }
set { SetValue(FirstNameProperty, value); }
}
public static readonly DependencyProperty FirstNameProperty;
public String LastName
{
get { return (String)GetValue(LastNameProperty); }
set { SetValue(LastNameProperty, value); }
}
public static readonly DependencyProperty LastNameProperty;
public String FullName
{
get { return ToString(); }
}
public override string ToString()
{
return FirstName + " " + LastName;
}
}
}
答案 0 :(得分:2)
如何将文本框绑定到多个值: 创建一个MultiValueConverter并使用它绑定到FirstName和LastName。
当FirstName或LastName更改时,FullName不会通知。在您的类中,删除DependencyProperty的所有用法,而是让类实现INotifyPropertyChanged。当FirstName或LastName更改时,为FullName发布PropertyChanged事件。将文本框直接绑定到FullName。
检查ObjectDataProvider是否“绑定”方法。
在这些答案中,我建议你做第二个。
答案 1 :(得分:1)
您可以像这样使用MultiBinding ......
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}, {1}">
<Binding Path="LastName" />
<Binding Path="FirstName" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>