Tag: dependency properties

如何使用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(); // […]

在依赖属性中获取’this’指针会改变回调

我在类中有以下依赖属性: class FooHolder { public static DependencyProperty CurrentFooProperty = DependencyProperty.Register( “CurrentFoo”, typeof(Foo), typeof(FooHandler), new PropertyMetadata(OnCurrentFooChanged)); private static void OnCurrentFooChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { FooHolder holder = (FooHolder) d.Property.Owner; // <- something like this // do stuff with holder } } 我需要能够检索对更改的属性所属的类实例的引用。 这是因为FooHolder有一些事件处理程序需要在属性值更改时挂钩/取消挂钩。 属性更改回调必须是静态的,但事件处理程序不是。

关于多个FrameworkElement实例的DependencyProperty的行为

所以我尝试使用DependencyProperty解决我在跨子视图传递本地ViewModel方面的问题。 然而,一个问题突然出现在我脑海中。 例如,我需要创建某个FrameworkElement多个实例,比如UserControl 。 UserControl定义了DependencyProperty 。 正如书中所述,依赖属性实例应该是static和readonly 。 DependencyProperty如何在这种情况下工作? 它是否与传统的UserControl属性相同,或者传递给DependencyProperty任何对象实例,它将被传递到所述UserControl所有实例?

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 […]

为什么WPF中的依赖项属性必须是静态的

为什么依赖属性必须是静态的? 我已经看到它已经在这里的一些post中被问过,但我无法正确理解它。 如果有人能用小片段帮助我理解,那将是很棒的。

为什么在MultiBinding中转换值时会得到DependencyProperty.UnsetValue?

我有一个非常简单的IMultiValueConverter,它只是OR的两个值。 在下面的示例中,我想使用同样简单的布尔型逆变器反转第一个值。 和逆变器: public class BoolInverterConverter : IValueConverter { #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value is bool) { return !((bool)value); } return null; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } #endregion } 当我包含boolInverter时,MultiValueConverter中的第一个值变为“DependencyProperty.UnsetValue”。 当我不使用转换器时没有问题(当然,不是我的目标逻辑)。 我错过了什么吗? 单步执行调试器会显示InverseBoolConverter正在反转我传递的值,但该值不会被“发送”到MultiValueConverter。

Silverlight中附加和非附加依赖属性的区别

好的Stackers,我在这个问题上花了好几个小时,我想知道是否有人有明确的答案。 对于我所做的所有研究,我找不到Silverlight中的 .Register和.RegisterAttached之间的任何区别。 现在,在你跳枪并告诉我.RegisterAttached用于将DP附加到另一个类之前,尝试使用DependencyProperty.Register()实现一个附加的依赖属性。 我发现没有一个区别,所以我不知道有什么区别。 此外,在我的具体情况下,我试图扩展Grid类的function,并希望给它一些额外的属性。 因此,我尝试列出将typeof(Grid)和typeof(FluidLayoutManager) (实现类)作为ownerType参数传递,它似乎也没有什么区别……(我相信它确实有所作为,当我从同一名称空间传递两个自定义类。但是当传递Microsoft定义的类与自定义类时,我总是将它作为自定义类的DP显示在XAML中。) 关于这个主题的任何澄清将非常感激,因为我坐在这里挠挠脑袋,想知道是否有任何差异,或者微软是否只是再次与我搞砸了。

Twoway-bind视图的DependencyProperty到viewmodel的属性?

网上的多个源告诉我们,在MVVM ,视图和视图模型之间的通信/同步应该通过依赖属性进行。 如果我理解正确,应该使用双向绑定将视图的依赖项属性绑定到viewmodel的属性。 现在,之前已经提出了类似的问题,但没有足够的答案。 在我开始分析这个相当复杂的问题之前,这是我的问题: 如何将自定义视图的DependencyProperty与viewmodel的属性同步? 在理想的世界中,您只需将其绑定为: 这不起作用,因为MyProperty不是UserControl的成员。 卫生署! 我尝试了不同的方法,但没有一个certificate是成功的。 一种解决方案是定义一个基类UserControlEx ,它具有必要的依赖属性,以使上述工作正常。 然而,这很快变得非常混乱。 还不够好!