【发布时间】:2017-03-15 13:44:41
【问题描述】:
我有一个 UserControl 和 2 个自定义 DependencyPropertys(ColumnsCount,RowsCount):
public partial class CabinetGrid : UserControl
{
public static readonly DependencyProperty ColumnsCountProperty =
DependencyProperty.Register("ColumnsCount", typeof (int), typeof (CabinetGrid));
public static readonly DependencyProperty RowsCountProperty =
DependencyProperty.Register("RowsCount", typeof (int), typeof (CabinetGrid));
public int ColumnsCount
{
get { return (int) GetValue(ColumnsCountProperty); }
set { SetValue(ColumnsCountProperty, value); }
}
public int RowsCount
{
get { return (int) GetValue(RowsCountProperty); }
set { SetValue(RowsCountProperty, value); }
}
}
这是DataBinding:
<view:CabinetGrid Grid.Column="1" Grid.Row="2" x:Name="GridRack" ColumnsCount="{Binding SelectedRoom.ColumnCount}" />
而窗口的DataContext 有一个属性SelectedRoom 调用PropertyChanged-Event。
通过调试,我知道UserControl 的DataContext 设置正确。
但是,当SelectedRoom 发生更改时(=> 我在列表中选择了另一个项目),我的UserControl 的DependencyProperty ColumnsCount 不会更新。
我感到非常沮丧,因为我已经使用XAMLSpy 和WpfSpoon 之类的工具,花了一整天的时间来调试这个意想不到的东西。
请帮忙。
编辑:
Clemens 已经指出,包裹DependencyProperty (ColumnsCount) 的CLR-Property 中的断点不会触发。这是一个主要问题,因为我必须调用一些更改方法。我正在尝试使用PropertyChangedCallback,但目前遇到了一些错误。
【问题讨论】:
-
谢谢,但它也不起作用。
-
“我的 UserControl 的 ColumnsCount 未更新”。你具体是怎么检查的?您根本没有看到任何东西,或者只是没有改变值吗?是否有针对源属性(即
SelectedRoom)的属性更改通知机制? -
@Clemens 当然,
SelectedRoomofc 调用了PropertyChanged-事件。我还在另一个UserControl中创建了DataBinding到SelectedRoom,并且我可以正确绑定到SelectedRoom的任何属性(它确实更新了) -
你没有意外地(明确地)在某个地方设置了你的 CabinetGrid 的 DataContext?
-
我检查更改,例如通过在
DependencyPropertysSetter中使用断点以及将标签文本绑定到SelectedRoom.ColumnCount。不,DataContext(至少在Loaded-Event 中)被正确设置为具有SelectedRoom属性的对象。
标签: c# wpf data-binding user-controls dependency-properties