我有一个UserControl
,其中包含2个自定义DependencyProperty
s 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
。
通过调试,我知道DataContext
的{{1}}已正确设置。
但是,当UserControl
发生更改(=&gt;我选择了列表中的其他项目)时,我的SelectedRoom
的{{1}} DependencyProperty
未更新。
我非常沮丧,因为我已经花了一整天时间使用ColumnsCount
和UserControl
之类的工具调试这个意想不到的事。
请帮忙。
编辑:
Clemens已经指出,XAMLSpy
包裹WpfSpoon
(CLR-Property
)的断点是未被解雇。这是一个主要问题,因为我必须在变更上调用一些方法。我正在尝试使用DependencyProperty
,但我目前遇到了一些错误。
答案 0 :(得分:1)
为了获得有关依赖项属性值更改的通知,您应该在注册属性时在PropertyMetadata中指定PropertyChangedCallback。
public static readonly DependencyProperty ColumnsCountProperty =
DependencyProperty.Register(
"ColumnsCount", typeof(int), typeof(CabinetGrid),
new PropertyMetadata(OnColumnsCountPropertyChanged));
private static void OnColumnsCountPropertyChanged(
DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
var cabinetGrid = (CabinetGrid)obj;
// do something with the CabinetGrid instance
}