我有以下问题:我在WPF中创建了一个具有AgreementID属性的UserControl。我需要在另一个UserControl中调用此UserControl,我需要在调用它时给它一个AgreementID。现在我在第一个UserControl中创建了DependencyProperty,但它不起作用。
这是我第一个UserControl的代码:
public partial class UC1001_AgreementDetails_View : UserControl
{
private UC1001_ActiveAgreementContract _contract;
private int _agreementID;
public int AgreementID
{
get { return _agreementID; }
set { _agreementID = value; }
}
public UC1001_AgreementDetails_View()
{
InitializeComponent();
}
public static readonly DependencyProperty AgreementIDProperty = DependencyProperty.Register("AgreementID", typeof(int), typeof(UC1001_AgreementDetails_View), new PropertyMetadata(null));
这是我调用之前的UserControl的XAML:
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<!--<Setter Property="Text" Value="{Binding Months[9].AgreementID}"/>-->
<Setter Property="Tag" Value="{Binding Months[9].AgreementID}"/>
<Setter Property="Background" Value="White" />
<Setter Property="DataGridCell.ToolTip">
<Setter.Value>
<my:UC1001_AgreementDetails_View Background="#FFF" Opacity="0.88" AgreementID="{Binding Months[9].AgreementID}"/>
</Setter.Value>
</Setter>
所以我想把当月的AgreementID放到第一个UserControl上,但是当我检查它时,传递的值总是0,但它应该是3.我检查了Months [9] .AgreementID值,它是确实如此。所以我在绑定中得到了正确的值,但它并没有通过正确的值。
我希望你的问题有点清楚,如果需要可以提供更多信息!
答案 0 :(得分:3)
您正在为Dependency Property定义属性facade错误。在属性定义中,您需要处理Dependency属性并设置并返回其值:
public int AgreementID
{
get { return (int) GetValue(AgreementIDProperty ); }
set { SetValue(AgreementIDProperty, value); }
}
答案 1 :(得分:2)
如前所述,您的属性包装器应该在依赖属性上调用GetValue
和SetValue
(并且您可以省去支持字段)。但是,值得指出的是,当直接在XAML中设置DependencyProperty
或从声明Binding
设置时,将绕过包装器属性。因此,如果您使用DependencyProperty
实际检查了GetValue
本身的值,那么您会看到实际由Binding
设置的值 。这是通过程序代码中的包装器检索属性值,因为它没有访问DependencyProperty
而失败了。