如何在不使用DataContext的情况下绑定到Silverlight中的本地属性
本文关键字:Silverlight 属性 绑定 情况下 DataContext | 更新日期: 2023-09-27 17:57:33
我有一个小问题,但一直在寻找一些不同的、大多模棱两可的答案:
我有以下用户控件,我正试图绑定到该控件中的公共属性(Events)。每个人都说我必须使用数据上下文,然而,我真的不想这么做。。。我只想从控件的XAML。。。
要求绑定必须是双向的,这样ui中的任何更改都将反映在它绑定到的属性(或者更确切地说是集合)中。该集合中的每个Event对象也以与此控件相同的方式实现INotifyPropertyChanged。。。
任何想法都将不胜感激!
public partial class EventEditorWindow : UserControl, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public ObservableCollection<Event> events;
public ObservableCollection<Event> Events
{
get { return this.events; }
set
{
if( this.events != value )
{
this.events = value;
this.RaisePropertyChanged("Events");
}
}
}
private void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
this.VerifyPropertyName(propertyName);
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
[Conditional("DEBUG")]
[DebuggerStepThrough]
public void VerifyPropertyName(string propertyName)
{
var currentObjectType = this.GetType();
if (currentObjectType.GetProperty(propertyName) == null)
{
throw new ArgumentException("Property not found", propertyName);
}
}
}
谢谢,Bleepzter。
在构造函数中,设置DataContext=this。这将有效地使您的代码落后于DataContext。AFAIK,您无法完全避免使成为的DataContext。
您可以使用RelativeSource,这样您就不需要DataContext:
{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type EventEditorWindow }}, Path=Events}
我不时地用这个备忘单。
EDIT抱歉,这是WPF语法。请参阅这篇文章,了解这篇文章在Silverlight 中的解决方案