我有一个像这样的 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。
什么是最简单的方法来做到这一点?
谢谢..
当发布的 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)
提前致谢。
我需要知道公共财产(有吸气剂和设定者)是否已经改变.该属性是一个简单的类(没有用户控件/组件等).
是否有一种优雅的方式来订阅某种事件,通知何时财产被更改?
我试着看看微软在他们的Binding对象中做了什么(使用反射器),这让我探索了PropertyDescriptor.AddValueChanged方法,但它对我没用.也许它仅适用于组件/用户控件......
有什么建议?
谢谢,
阿迪巴尔达
我正在使用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?
我相信当你输入一个你喜欢的文本框时,大多数人都会遇到这种情况,根据已输入的内容过滤ViewCollection.
它在WPF中非常直接,只需将UpdateSourceTrigger更改为Text绑定到PropertyChanged即可.
正如您所料,Silverlight没有它.只有默认和显式.
我有想法将交互行为绑定到文本框的TextChanged事件.你会推荐这种方法还是有更好的方法?
silverlight updatesourcetrigger propertychanged silverlight-4.0
我试图通过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) 我有一个类作为属性与属性观察者.如果我在该类中更改某些内容,是否有办法触发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) 我正在修改一个Silverlight项目,该项目大量使用后面的代码来设置属性等.这是几年前创建的,并且或多或少地从WinForms项目移植过来.
我注意到的问题是,当我为属性设置数据绑定时,在这种情况下为Visibility,如果该属性直接在后面的代码中设置,则删除数据绑定.我甚至在PropertyChanged事件上设置了断点以验证是否是这种情况.
我做了很多WPF开发,从未注意到这一点.这是正常的,我错过了它或者是不是很正确?
如果有一个带有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) 我正在寻找一种解决方案,如果内部属性之一发生变化,则触发整个属性的 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) 我在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)
任何帮助将不胜感激!
我的视图模型中有以下属性,视图绑定到此属性.
所有工作都很好,除了一个特殊情况,其中ActiveCategory(在_catManager)内可以从其他事件(在该视图之外)改变.
我不想Category Manager在视图模型中公开整个,所以我只暴露了我需要的属性.执行此操作的最佳方法是什么,以便视图获得所有更改的通知,甚至是在此视图模型中未触发的更改?
public ICategory SelectedCategory
{
get
{
return _catManager.ActiveCategory;
}
set
{
_catManager.ActiveCategory = value;
OnPropertyChanged("SelectedCategory");
}
}
Run Code Online (Sandbox Code Playgroud) 如何提高PropertyChanged对SomeProperty类B?
此示例无法编译,因为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) propertychanged ×13
c# ×7
wpf ×5
silverlight ×3
mvvm ×2
properties ×2
binding ×1
data-binding ×1
datagrid ×1
didset ×1
dynamic ×1
events ×1
generics ×1
mocking ×1
observers ×1
rhino-mocks ×1
swift ×1