Tag: propertychanged

ObservableCollection PropertyChanged事件

好的,所以我想ObservableCollection子类,为它添加一个属性。 不幸的是, PropertyChanged事件受到保护。 基本上我想将它子类化为一个SelectedItem ,我可以绑定到我的MVVM WPF应用程序中的列表。 这是我class级的骨架: public class SelectableList : ObservableCollection { public T SelectedItem {get;set;} } 但我无法做到以下几点: SelectableList intList = new SelectableList(); intList.PropertyChanged += new PropertyChangedEventHandler(intList_Changed); 因为访问限制。 这让我提出了一个更深层次的问题。 为什么UI会收到PropertyChanged事件的通知(例如Count属性),我不能在代码隐藏中做到这一点? 我的头在旋转,有人可以赐教吗?

MVVM – 绑定到聚合属性

我有以下viewmodels: public class ViewModel: INotifyPropertyChanged { public ObservableCollection Items { get; set; } … } public class Item: INotifyPropertyChanged { public SubItem A { get; set; } public SubItem B { get; set; } … } public class SubItem: INotifyPropertyChanged { public bool Valid { get; set; } … } XAML: 如果我想显示文本”Valid item”如果A.Valid和B.Valid都为true ,那么: 我可以通过在视图中使用逻辑(项目数据模板)来完成此操作,例如使用可见性和额外容器: […]

如何使用PropertyChangedCallBack

我有一个绑定到依赖属性的TextBox,我已经实现了一个PropertyChangedCallBack函数,当文本更改时我需要调用textbox.ScrollToEnd()但我不能因为PropertChanged函数需要是静态的,有没有办法绕过这个? static FrameworkPropertyMetadata propertyMetaData = new FrameworkPropertyMetadata(“MyWindow”, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, new PropertyChangedCallback(TextProperty_PropertyChanged)); public static readonly DependencyProperty TextProperty = DependencyProperty.Register(“TextProperty”, typeof(string), typeof(OutputPanel), propertyMetaData); private void TextProperty_PropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) { textbox.ScrollToEnd(); //An object reference is required for the non-static field. } public string Text { get { return this.GetValue(TextProperty) as string; } set { this.SetValue(TextProperty, value); //textbox.ScrollToEnd(); // […]

为什么我不能从扩展方法调用PropertyChanged事件?

我试图编写一个类来避免像“RaisePropertyChanged”这样的方法。 我知道我可以从具有该实现的类inheritance,但在某些情况下我不能。 我尝试使用扩展方法,但Visual Studio抱怨。 public static class Extension { public static void RaisePropertyChanged(this INotifyPropertyChanged predicate, string propertyName) { if (predicate.PropertyChanged != null) { predicate.PropertyChanged(propertyName, new PropertyChangedEventArgs(propertyName)); } } } 它说: “事件’ System.ComponentModel.INotifyPropertyChanged.PropertyChanged’只能出现在+ =或 – =的左侧 ”

WPF:PropertyChangedCallback只触发一次

我有一个用户控件,它公开了一个名为VisibileItems的DependencyProperty。每次该属性更新时,我都需要触发另一个事件。 为此,我添加了一个带有PropertyChangedCallback事件的FrameworkPropertyMetadata。 由于某种原因,此事件仅被调用一次,并且在下次VisibleItems更改时不会触发。 XAML: CurrentTables是MyViewModel上的DependencyProperty。 CurrentTable经常变化。 我可以将另一个WPF控件绑定到CurrentTables,我看到UI中的更改。 这是我使用PropertyChangedCallback连接VisibleItems的方式 public static readonly DependencyProperty VisibleItemsProperty = DependencyProperty.Register( “VisibleItems”, typeof(IList), typeof(MyFilterList), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender, new PropertyChangedCallback(VisiblePropertyChanged)) ); public IList VisibleItems { get { return (IList)GetValue(VisibleItemsProperty); } set { SetValue(VisibleItemsProperty, value); } } 通过单步进入VisiblePropertyChanged,我可以看到第一次设置CurrentTables时会触发它。 但不是随后的时间。 UPDATE 当你们中的一些人质疑CurrentTables的修改方式时,它会在更改时完全重新分配: OnDBChange()… CurrentTables = new List(MainDatabaseDataAdapter.GetTables(this.SelectedServer, this.SelectedDatabase)); 每次更改都会调用此行,但我的VisiblePropertyChanged处理程序仅在第一次调用时才会被调用。 UPDATE 如果我直接分配VisibleItems,每次都会调用处理程序! TestFilterList.VisibleItems = new […]

列出 INotifyPropertyChanged事件

我有一个带有字符串属性和List属性的简单类,我实现了INofityPropertyChanged事件,但当我对字符串List执行.Add时,此事件未被命中,因此我的ListView中显示的Converter未被命中。 我猜测属性已更改未被添加到列表中….如何实现此方法以获取该属性更改事件命中??? 我需要使用其他类型的collections吗?! 谢谢你的帮助! namespace SVNQuickOpen.Configuration { public class DatabaseRecord : INotifyPropertyChanged { public DatabaseRecord() { IncludeFolders = new List(); } #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; protected void Notify(string propName) { if (this.PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propName)); } } #endregion private string _name; public string Name { get { return _name; […]

PropertyChangedEventHandler如何工作?

这是一个非常简单的问题,但我想知道是否有人可以解释第4行实际上在做什么? 所以第一行给处理程序一个事件。 我真的不知道在什么情况下处理程序将返回null或最后一行的作用。 当你传递处理程序你的对象和哪个属性发生了变化时,它对它们有什么影响? PropertyChangedEventHandler handler = PropertyChanged; //property changed is the event if (handler != null) { handler(this, new PropertyChangedEventArgs(name)); } 我假设我使用它来获取此代码,但我想了解它正在做什么。

在TextBox条目中暂停期间引发PropertyChanged事件?

我想知道当用户在TextBox键入文本时暂停时是否可以引发PropertyChanged事件? 或者更具体地说,我想在用户停止在TextBox中键入X秒后运行一个方法。 例如,我有一个带有TextBox的表单,没有别的。 用户在TextBox中键入1-9位Id值,相当资源密集的后台进程加载记录。 我不想使用UpdateSouceTrigger=PropertyChanged因为这会导致资源密集型后台进程在键入字符时运行,因此9个ID号从这些进程中的9个开始。 我也不想使用UpdateSourceTrigger=LostFocus因为表单上没有任何其他内容可以使TextBox失去焦点。 那么有没有办法让我的后台进程只有在用户在输入ID号时暂停后才会运行?

BindingProxy:绑定到索引属性

我有一个BindingProxy将DataGrid的DataGridColumns的Visibility属性绑定到Dictionary中的值(“ColumnsVisibility”)。 我还有一个Context-Menu,可以隐藏/显示Grid的列。 初始加载工作,如果字典“ColumnsVisibility”在InitializeComponent()之前填充了Information,则应用我设置DictionaryEntry的值。 我的目标是检查Contextmenu中的复选框,列出现/消失。 因为ContextMenu和Columns不是与DataGrid或其他所有相同的可视树的成员,所以我正在使用Proxy。 我的问题是,在ContextMenu中检查/取消选中CheckBox不会改变ColumnsVisibility [ElementName]的值。 如果我将check / uncheck-Event添加到Checkbox,我可以在代码中使用它来更改它,但是触发PropertyChanged-Event不会改变任何视觉效果。 该列保持原样。 BindingProxy是否将事件转发到GUI,反之亦然? 目前似乎没有。 任何人都有一个想法如何解决这个问题? 编辑: BindingProxy: public class BindingProxy : Freezable { #region Overrides of Freezable protected override Freezable CreateInstanceCore() { return new BindingProxy(); } #endregion public object Data { get { return (object)GetValue(DataProperty); } set { SetValue(DataProperty, value); } } // Using a DependencyProperty […]