标签: propertychanged

C# Wpf 编辑 Datagrid 不会更新它的 itemsource

我有一个像这样的 ObservableCollection,

ObservableCollection<Item> Found_Items = new ObservableCollection<Item>();

public struct Item
        {
            public bool Enabled { get; set; }
            public BitmapImage ItemIcon { get; set; }
            public string Path { get; set; }
            public string Size { get; set; }
        }
Run Code Online (Sandbox Code Playgroud)

我正在像这样设置 Datagrid 的 itemsource,

FoundItemsDatagrid.ItemsSource = Found_Items;
Run Code Online (Sandbox Code Playgroud)

我在 Datagrid 中有一个这样的复选框,

<DataGridTemplateColumn Header="Path" Width="*" >
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <DockPanel> 
                            <CheckBox IsChecked="{Binding Path=Enabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>                         
                        </DockPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)

我想,每当我选中或取消选中 datagrid 上的复选框时,它都应该更新我的 ObservableCollection。

什么是最简单的方法来做到这一点?

谢谢..

wpf datagrid propertychanged

5
推荐指数
1
解决办法
4710
查看次数

C# - 如何根据另一个属性 (ObservableCollection) 的更改来更改属性的值?

当发布的 Read 属性发生更改时,如何更改 TotalPublicationsRead 的值?

public class Report
{
   public ObservableCollection<Publication> Publications { get; set; }
   public int TotalPublicationsRead { get; set; }
}

public class Publication : INotifyPropertyChanged
{
   private bool read;
   public bool Read 
   { 
      get { return this.read; }
      set
      {
         if (this.read!= value)
         {
             this.publications = value;
             OnPropertyChanged("Read");
         }
      }
   }

   #region INotifyPropertyChanged Members

   public event PropertyChangedEventHandler PropertyChanged;

   #endregion

   private void OnPropertyChanged(string property)
   {
       if (this.PropertyChanged != null)
       {
           PropertyChanged(this, new PropertyChangedEventArgs(property));
       }
   }           
}
Run Code Online (Sandbox Code Playgroud)

提前致谢。

c# observablecollection propertychanged

4
推荐指数
1
解决办法
1万
查看次数

C# - 如何确定属性是否已更改

我需要知道公共财产(有吸气剂和设定者)是否已经改变.该属性是一个简单的类(没有用户控件/组件等).
是否有一种优雅的方式来订阅某种事件,通知何时财产被更改?
我试着看看微软在他们的Binding对象中做了什么(使用反射器),这让我探索了PropertyDescriptor.AddValueChanged方法,但它对我没用.也许它仅适用于组件/用户控件......

有什么建议?

谢谢,
阿迪巴尔达

c# properties propertydescriptor propertychanged

4
推荐指数
1
解决办法
4548
查看次数

在更改时,使模拟触发PropertyChanged

我正在使用RhinoMocks,我有一个Mock,它具有我需要表现为属性的属性 - 在设置时更新其值,并在更改属性时触发PropertyChanged.

模拟对象的接口本质上是这样的:

public interface IFoo
{
    event PropertyChangedEventHandler PropertyChanged;
    int Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在创建模拟时,我设置了PropertyBehavior - 这使它实际更新了它的伪造值:

var mocks = new MockRepository();
var fakeFoo = mocks.DynamicMock<IFoo>();
SetupResult.For(fakeFoo.Bar).PropertyBehavior();
Run Code Online (Sandbox Code Playgroud)

但是当我更新值时,PropertyChanged没有被触发.现在,接口没有实现INotifyPropertyChanged接口,因为它是一个接口..如何触发PropertyChanged?

c# rhino-mocks mocking propertychanged

4
推荐指数
1
解决办法
2464
查看次数

Silverlight中的UpdateSourceTrigger PropertyChanged?

我相信当你输入一个你喜欢的文本框时,大多数人都会遇到这种情况,根据已输入的内容过滤ViewCollection.

它在WPF中非常直接,只需将UpdateSourceTrigger更改为Text绑定到PropertyChanged即可.

正如您所料,Silverlight没有它.只有默认和显式.

我有想法将交互行为绑定到文本框的TextChanged事件.你会推荐这种方法还是有更好的方法?

silverlight updatesourcetrigger propertychanged silverlight-4.0

4
推荐指数
1
解决办法
2495
查看次数

计算Property Changed MVVM上的两个值的结果

我试图通过MVVM中的以下简单公式计算"NetAmount"

GrossAmount + Carriage - Discount = NetAmount

我正在使用MVVM Light Toolkit和声明的属性如下

public const string DiscountPropertyName = "Discount";
private double _discount;
public double Discount
{
    get
    {
        return _discount;
    }

    set
    {
        if (_discount == value)
        {
            return;
        }
        _discount = value;
        // Update bindings, no broadcast
        RaisePropertyChanged(DiscountPropertyName);
    }
}

public const string CarriagePropertyName = "Carriage";
private double _carriage;

public double Carriage
{
    get
    {
        return _carriage;
    }
    set
    {
        if (_carriage == value)
        {
            return;
        }
        _carriage = value;
        RaisePropertyChanged(CarriagePropertyName); …
Run Code Online (Sandbox Code Playgroud)

c# silverlight mvvm propertychanged

4
推荐指数
1
解决办法
2067
查看次数

有没有办法在更改类中的属性时让didSet工作?

我有一个类作为属性与属性观察者.如果我在该类中更改某些内容,是否有办法触发didSet,如示例所示:

class Foo {
    var items = [1,2,3,4,5]
    var number: Int = 0 {
        didSet {
            items += [number]
        }
    }
}

var test: Foo = Foo() {
    didSet {
        println("I want this to be printed after changing number in test")
    }
}

test.number = 1 // Nothing happens
Run Code Online (Sandbox Code Playgroud)

observers propertychanged swift didset

4
推荐指数
1
解决办法
2313
查看次数

Silverlight:设置属性直接删除数据绑定?

我正在修改一个Silverlight项目,该项目大量使用后面的代码来设置属性等.这是几年前创建的,并且或多或少地从WinForms项目移植过来.

我注意到的问题是,当我为属性设置数据绑定时,在这种情况下为Visibility,如果该属性直接在后面的代码中设置,则删除数据绑定.我甚至在PropertyChanged事件上设置了断点以验证是否是这种情况.

我做了很多WPF开发,从未注意到这一点.这是正常的,我错过了它或者是不是很正确?

data-binding silverlight propertychanged

3
推荐指数
1
解决办法
457
查看次数

依赖属性的PropertyChangedCallback未被调用

如果有一个带有DependencyProperty的自己的用户控件和相应的回调方法,如下所示:

public partial class PieChart : UserControl
{
    public static readonly DependencyProperty RatesProperty = DependencyProperty.Register("Rates", typeof(ObservableCollection<double>), typeof(PieChart),
        new PropertyMetadata(new ObservableCollection<double>() { 1.0, 1.0 }, new PropertyChangedCallback(OnRatesChanged)));

[...]

    public static void OnRatesChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        ((PieChart)d).drawChart();
    }
Run Code Online (Sandbox Code Playgroud)

使用此用户控件时,我将名为"Rates"的ObservableCollection绑定到RatesProperty.费率和相关方法如下所示:

private ObservableCollection<double> rates;
public ObservableCollection<double> Rates
{
    get { return this.rates; }
    set
    {
        if (this.rates != value)
        {
            this.rates = value;
            OnPropertyChanged("Rates");
        }
    }
}

public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
    if (PropertyChanged != null)
        PropertyChanged(this, new …
Run Code Online (Sandbox Code Playgroud)

wpf user-controls dependency-properties propertychanged

3
推荐指数
1
解决办法
8076
查看次数

如果内部属性更改,则整个对象的 RaisePropertyChanged

我正在寻找一种解决方案,如果内部属性之一发生变化,则触发整个属性的 PropertyChanged 。所以这是模型:

public class MainStatus : ObservableObject
{
    private bool _safety;
    public bool Safety
    {
        get { return _safety; }
        set
        {
            if (_safety == value)
                return;
            _safety = value;
            RaisePropertyChanged("Safety");
        }
    }
    private bool _setupMode
    public bool SetupMode
    {
        get { return _setupMode; }
        set
        {
            if (_setupMode == value)
                return;
            _setupMode = value;
            RaisePropertyChanged("SetupMode");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它还有更多属性(bool、int 和 string)。

在虚拟机中它的使用方式如下:

private MainStatus _mainStatus;
public MainStatus MainStatus
{
    get { return _mainStatus; }
    set
    {
        if (_mainStatus …
Run Code Online (Sandbox Code Playgroud)

wpf properties mvvm propertychanged

2
推荐指数
1
解决办法
3336
查看次数

更新泛型类的泛型属性?

我在C#上很新,Generic Classes所以我不知道我们是否可以动态更新泛型类的泛型属性?

假设我有一堂课

A { long id; long count; }
Run Code Online (Sandbox Code Playgroud)

我们可以编写一个扩展,将给定属性更新为1

A.AddOne(a => a.id); will change A {id=1, count=1} to A {id=2, count=1}

and

A.AddOne(a => a.count); will change A {id=1, count=1} to A {id=1, count=2}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

c# generics dynamic propertychanged

1
推荐指数
1
解决办法
900
查看次数

如何从C#/ WPF中的嵌套属性获取通知?

我的视图模型中有以下属性,视图绑定到此属性.

所有工作都很好,除了一个特殊情况,其中ActiveCategory(在_catManager)内可以从其他事件(在该视图之外)改变.

我不想Category Manager在视图模型中公开整个,所以我只暴露了我需要的属性.执行此操作的最佳方法是什么,以便视图获得所有更改的通知,甚至是在此视图模型中未触发的更改?

 
    public ICategory SelectedCategory
     {
      get
       {
        return _catManager.ActiveCategory;
       }
      set
       {
        _catManager.ActiveCategory = value;
        OnPropertyChanged("SelectedCategory");
       }
     }
Run Code Online (Sandbox Code Playgroud)

c# wpf binding propertychanged

1
推荐指数
1
解决办法
615
查看次数

如何提高派生类中的属性?

如何提高PropertyChangedSomePropertyB

此示例无法编译,因为PropertyChanged无法以这种方式访问​​...

public class A : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
}

public class B : A
{
    private object _someProperty;

    public object SomeProperty
    {
        get => _someProperty;
        set
        {
            _someProperty = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SomeProperty)))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# wpf events propertychanged inotifypropertychanged

0
推荐指数
1
解决办法
192
查看次数