我有一个小问题,但已经找到了很多不同的,而且大多是含糊不清的答案:
我有以下用户控件,我正在尝试绑定到该控件(事件)中的公共属性。每个人都说我必须使用数据上下文,但是,我真的不想这样做......我只是想从控件中绑定到属性 XAML ...
要求是绑定必须是2路,因此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。
答案 0 :(得分:1)
在构造函数中,设置DataContext = this。这将有效地使您的代码支持DataContext。 AFAIK,你不能完全避免使用某些东西使用DataContext。
答案 1 :(得分:1)
您可以使用RelativeSource,因此您不需要DataContext:
{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type EventEditorWindow }}, Path=Events}
我不时使用this cheat sheet。
编辑糟糕这是WPF语法。请参阅此帖子以查看this post to solve it in Silverlight