Tag: inotifypropertychanged

PropertyGrid没有注意到代码中的属性已更改?

我有一个Winform应用程序,它使用颜色突出显示某些事物。 我想让用户改变’他们’的颜色。 作为练习,我想我会创建一个类的实例,具有颜色属性,并将其分配给属性网格(以获得一个漂亮的编辑器) 。 这似乎工作得很好,但我想我想让用户重置颜色(在他们摆弄并将它们设置为20个米色)之后 。 所以,我在表单中添加了一个“重置”按钮,它将我的对象的颜色属性设置回默认值。 但是,它似乎在设置我的对象的属性时,属性网格不会改变。 如果在重置后,我执行属性网格“刷新”,它具有重置颜色。 我假设属性网格不知道底层对象已被更改? 在这种情况下是否缺少某些东西,或者我应该接受它并在重置对象时调用Refresh方法? 谢谢 ( 这里非常相似的问题) public partial class Form1 : Form { public Form1() { InitializeComponent(); this.propertyGrid1.SelectedObject = new Colours(); } private void button1_Click(object sender, EventArgs e) { Colours colours = this.propertyGrid1.SelectedObject as Colours; colours.Reset(); } } public partial class Colours : INotifyPropertyChanged { public event […]

为什么我不能从扩展方法调用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’只能出现在+ =或 – =的左侧 ”

INotifyPropertyChanged和ObservableCollection WPF

现在我有一个只显示一个月的日历(我通过的月份)。 我试图让用户从comboBox中选择月份和年份并更新日历。 我使用observablecollection绑定,我很熟悉。 我不知道INotifyPropertyChanged如何工作。 我以前从未使用过它。 非常感谢任何帮助或建议。 这是我到目前为止: public class Schedule : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void Update(int propertyName) { if (propertyName != null) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) handler.Invoke(this, new PropertyChangedEventArgs(propertyName.ToString())); } } // public void UpdateCal(PropertyChangedEventArgs e) // { // if (PropertyChanged != null) // PropertyChanged(this, e); […]

绑定工作没有INotifyPropertyChanged,为什么?

这就是我们通常的做法: public class ViewModel : INotifyPropertyChanged { string _test; public string Test { get { return _test; } set { _test = value; OnPropertyChanged(); } } public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged([CallerMemberName] string property = “”) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property)); } 现在我们的属性可以被视图中的多个元素使用,例如: 更改TextBox值将更新TextBlock内容。 我们可以在视图模型中设置值,视图会自动更新。 如果我们写这样的视图模型 public class ViewModel { public string Test { get; […]

当绑定属性强制执行某些业务规则时,绑定的WPF TextBox不会更新值

我使用的是.NET 4.0。 我有一些非常简单的代码,允许用户输入1到99,999(含)之间的数字。 我在Property setter中有一些逻辑,如果它不遵守业务规则(例如,它不是数字或数字太大),则会阻止应用最新值。 public class MainViewModel : INotifyPropertyChanged { #region Fields private string _text = string.Empty; #endregion // Fields #region Properties public string Text { get { return _text; } set { if (_text == value) return; if (IsValidRange(value)) { _text = value; } OnPropertyChanged(“Text”); } } #endregion // Properties #region Private Methods […]

为什么OnPropertyChanged在Code Behind中不起作用?

我试图通过将ViewModel模型放在后面的代码中并将DataContext绑定为“this”来简化一些代码,但它似乎工作方式不同,在下面的示例中: 为什么在单击按钮时,绑定到“Message”的TextBlock不会更改,即使调用了OnPropertyChanged(“Message”)? XAML: 代码背后: using System.Windows; using System.ComponentModel; namespace TestSimple223 { public partial class Window1 : Window { #region ViewModelProperty: Message private string _message; public string Message { get { return _message; } set { _message = value; OnPropertyChanged(“Message”); } } #endregion public Window1() { InitializeComponent(); DataContext = this; Message = “original message”; Message2.Text = […]

创建一个事件以监视变量的变化

我们只说我有: public Boolean booleanValue; public bool someMethod(string value) { // Do some work in here. return booleanValue = true; } 如何创建一个在booleanValue发生更改时触发的事件处理程序? 可能吗?

在BindingList的ItemChanging事件中获取已删除的项目

我在我的应用程序中使用绑定列表以及ItemChanged事件。 有什么办法可以知道ItemChanged事件中以前的属性值。 目前我正在添加一个名为’OldValue’的独立属性来实现此目的。 有没有办法知道项目更改事件中已删除的项目。 我无法找到任何方法来知道哪个项目已从列表中删除。

C#,WPF,MVVM和INotifyPropertyChanged

我感到困惑; 我以为我理解了INotifyPropertyChanged。 我有一个小的WPF应用程序,前端是MainWindow类,中间有一个视图模型,后面有一个模型。 在我的例子中,模型是Simulator类。 SimulatorViewModel几乎是透明的,只是MainWindow和Simulator之间的接口属性。 Simulator实现了INotifyPropertyChanged,Simulator中的每个属性setter都调用了RaisePropertyChanged方法: private string serialNumber; public string SerialNumber { get { return serialNumber; } set { serialNumber = value; RaisePropertyChanged(“SerialNumber”); } } public event PropertyChangedEventHandler PropertyChanged; public void RaisePropertyChanged(string propName) { if (this.PropertyChanged != null) { this.PropertyChanged(this, new PropertyChangedEventArgs(propName)); } } 在xaml中,我有一个带有这样绑定的TextBox: Text=”{Binding Path=SerialNumber, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}” DataContext是SimulatorViewModel(但请参阅我关于将DataContext更改为模型的注释) ViewModel只传递属性: public string SerialNumber […]

INotifyPropertyChanged和静态属性

我想把自己绑在一个简单的问题上。 我有一个实现INotifyPropertyChanged的类。 某些实例属性的getter使用静态属性,因此如果静态属性发生变化,它们的值可能会发生变化? 这是一个简化的例子。 class ExampleClass : INotifyPropertyChanged { private static int _MinimumLength = 5; public static int MinimumLength { get { return _MinimumLength; } set { if (_MinimumLength != value) { _MinimumLength = value; //WHAT GOES HERE } } } private int _length = -1; public int length { get { return (_length > […]