我有一个名为UserControl
的{{1}},其中包含以下属性:
BranchFilter
在同一个控件中,我注册了一个依赖项属性,以便我可以将分支id绑定到viewmodel:
private int? _branchId;
public int? LocalBranchId
{
get { return _branchId; }
set
{
SetProperty(ref _branchId, value);
OnBranchChanged();
}
}
当我尝试访问此属性时,甚至没有绑定它,在视图中,如下所示:
public static readonly DependencyProperty BranchIdProperty = DependencyProperty.Register(nameof(LocalBranchId), typeof(int?), typeof(BranchFilter), new UIPropertyMetadata(null));
我收到编译错误:
会员" BranchId"无法识别或无法访问。
该物业' BranchId'未在类型' BranchFilter'中找到。
该物业' BranchId'在XML命名空间中不存在 ' CLR-名称空间:ApptBook.Client.Modules.Common.Controls'
我已经关注了每个示例,但他们都是一样的,因为添加了依赖项属性,但我尝试过的所有内容都失败了。这么简单的事情可能有什么问题?
答案 0 :(得分:2)
您是否应该使用LocalBranchId
而不是BranchId
来访问它?
<controls:BranchFilter Grid.Row="0" LocalBranchId="0">
<i:Interaction.Triggers>
<i:EventTrigger EventName="BranchChanged">
<i:InvokeCommandAction Command="{Binding LoadItems}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</controls:BranchFilter>
我还要将DependencyProperty
从BranchIdProperty
重命名为LocalBranchIdProperty
。
答案 1 :(得分:1)
您应该正确地将LocalBranchId
声明为依赖属性:
public static readonly DependencyProperty LocalBranchIdProperty =
DependencyProperty.Register(
nameof(LocalBranchId), typeof(int?), typeof(BranchFilter));
public int? LocalBranchId
{
get { return (int?)GetValue(LocalBranchIdProperty); }
set { SetValue(LocalBranchIdProperty, value); }
}
如果您需要在属性值更改时收到通知,则可以注册a PropertyMetnge的PropertyChangedCallback:
public static readonly DependencyProperty LocalBranchIdProperty =
DependencyProperty.Register(
nameof(LocalBranchId), typeof(int?), typeof(BranchFilter),
new PropertyMetadata(LocalBranchIdPropertyChanged));
public int? LocalBranchId
{
get { return (int?)GetValue(LocalBranchIdProperty); }
set { SetValue(LocalBranchIdProperty, value); }
}
private static void LocalBranchIdPropertyChanged(
DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
var control = (BranchFilter)obj;
var id = (int?)e.NewValue;
...
}