我有一个简单的Person模型:
public class Person
{
public string FirstName { get; set; }
public DateTime LastUpdated { get; set; }
}
假设我有一个带有TextBox的View,它绑定到LastUpdated字段:
<TextBox Grid.Column="1" Margin="5" Text="{Binding Person.FirstName}"/>
现在我需要以某种方式实现PropertyChanged。让我们使用Prism Snippet。 我需要的是在Person类上执行SetProperty:
private Person person;
public Person Person
{
get { return person; }
set { SetProperty(ref person, value); }
}
而不是Person类中的LastUpdated字段:
private DateTime? lastUpdated;
public DateTime? LastUpdated
{
get { return lastUpdated; }
set { SetProperty(ref lastUpdated, value); }
}
这不是模型中依赖性的问题。我通过DataContract(WCF服务)得到了模型,所以我无法改变它。那么有没有办法观察类的变化并将类字段绑定到某个UI控件。
答案 0 :(得分:1)
如果您正在使用Prism,那么您可能正在使用MVVM模式。如果是这样,那么一种方法是使用视图模型进行绑定。不要将Person
公开为属性,而是公开要绑定的各个属性 - FirstName
和LastUpdated
:
答案 1 :(得分:1)
有没有办法观察类的变化并将类字段绑定到某个UI控件。
没有。您需要为实际绑定到的属性的对象引发PropertyChanged
事件。
如果从某些第三方服务获得Person
对象,您无法修改代码以在PropertyChanged
属性的setter中引发FirstName
事件,则不应该绑定到这些对象。
相反,您应该创建自己的视图模型类并绑定到此视图模型类。视图模型可以简单地包装WCF类,例如:
public class PersonViewModel
{
private readonly Person _person;
public PersonViewModel(Person person)
{
_person = person;
}
public string FirstName
{
get { return _person.FirstName; }
set { _person.FirstName = value; RaisePropertyChanged(); }
}
}