所以我有一个像这样的自定义DependencyProperty:
public class PatientLookUp : TextBox
{
public static readonly DependencyProperty PatientProperty = DependencyProperty.Register("Patient", typeof(Patient), typeof(PatientLookUp), new FrameworkPropertyMetadata { BindsTwoWayByDefault = true });
public Patient Patient
{
get { return (Patient)GetValue(PatientProperty); }
set { SetValue(PatientProperty, value); }
}
//some logic for getting the Patient...
}
编辑:它在CustomControl中定义。使用此CustomControl的另一个控件绑定Patient属性并侦听其已更改的事件。问题是,我做了一些网络请求的东西,如果我得到一个空的患者,我仍然想要通知另一个控件CustomControl已经做了它的东西,即使患者没有真正改变。 所以现在我想手动调用PropertyChanged事件。有没有办法做到这一点?
希望你能帮助我,谢谢。
Edit2:我的XAML绑定患者(缩短):
<Window Name="MyWindow">
<Grid>
<llc:PatientLookUp Patient="{Binding Patient}" MaxLength="10" Text="{Binding SocialSecurityNumber}" />
</Grid>
<Window>
现在我需要通知MyWindow的ViewModel,以防PatientLookUp的Patient对象发生变化。 LookUp按下回车键时触发了请求逻辑。请求完成后,我想通知MyWindow的ViewModel,即使它找不到任何人,但该值仍为null。
答案 0 :(得分:1)
您从标准的WPF TextBox
派生出来并放置一些完全不合适的东西。
你以非常不方便的方式接近这一点。
相反:使用常规TextBox,绑定到PatientSearchViewModel.SearchString
,当更改SearchString时,触发搜索(从ViewModel),如果找到,则设置PatientSearchViewModel.Patient
属性和{{1}这样就可以通知UI更改。
你是这样的:
NotifyPropertyChange()
虽然最简单方便的方法是:
DataModel -> View -> ViewModel
答案 1 :(得分:0)
您的类需要从INotifyPropertyChanged接口继承并实现它的类。完成后,您应该可以在属性集上调用OnPropertyChanged方法。
继承INotifyPropertyChanged:
public partial class MainWindow : INotifyPropertyChanged
实施INotifyPropertyChanged:
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
调用NotifyPropertyChanged:
public Patient Patient
{
get { return (Patient)GetValue(PatientProperty); }
set
{
SetValue(PatientProperty, value);
OnPropertyChanged();
}
}