WPF UserControl依赖项属性值

时间:2011-10-14 14:03:33

标签: c# wpf xaml dependency-properties

我有以下问题:我在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值,它是确实如此。所以我在绑定中得到了正确的值,但它并没有通过正确的值。

我希望你的问题有点清楚,如果需要可以提供更多信息!

2 个答案:

答案 0 :(得分:3)

您正在为Dependency Property定义属性facade错误。在属性定义中,您需要处理Dependency属性并设置并返回其值:

public int AgreementID
{
    get { return (int) GetValue(AgreementIDProperty ); }
    set { SetValue(AgreementIDProperty, value); }
}

答案 1 :(得分:2)

如前所述,您的属性包装器应该在依赖属性上调用GetValueSetValue(并且您可以省去支持字段)。但是,值得指出的是,当直接在XAML中设置DependencyProperty或从声明Binding设置时,将绕过包装器属性。因此,如果您使用DependencyProperty实际检查了GetValue本身的值,那么您会看到实际由Binding设置的值 。这是通过程序代码中的包装器检索属性值,因为它没有访问DependencyProperty而失败了。