UserControl中的DependencyProperty

时间:2013-11-24 13:03:01

标签: c# wpf user-controls dependency-properties

我正在创建一个UserControl“UC”。我的班级有数据“AClass”。我希望这个类的对象是我的UserControl中的DP。所以我把这个定义放在UC中:

public static readonly DependencyProperty AProperty =
    DependencyProperty.Register("A", typeof(AClass),
    typeof(UC), new FrameworkPropertyMetadata(new AClass()));

public AClass A
{
    get { return (AClass)GetValue(AProperty); }
    set { SetValue(AProperty, value); }
}    

以下是我在XAML中创建控件的方法:

xmlns:l="clr-namespace:MyWorkspace"
// ...
<Grid>
    <l:UC Height="100" Width="150" Activity="{Binding a}" />
</Grid>

我在代码隐藏文件中定义了“a”:

public partial class MainWindow : Window
{
    public AClass a {get; set;}
    public MainWindow()
    {
        DataContext = this;
        a = // create an object
        InitializeComponent();
    }
}

接下来,在我的UC中,我想引用“A”并使用其中一个属性:

private void DoSomethingInUC()
{
   int size = A.AsProperty;
   // ...
}

问题在于每次我引用“A”时它都是未初始化的(即“AsProperty”包含默认值)。

那有什么不对?

1 个答案:

答案 0 :(得分:0)

1)你的A DP怎么样是double 类的?

2)你很可能想避免这样做:

new FrameworkPropertyMetadata(new AClass())

因为您在那里新建的确切AClass实例将被共享   所有UserControl实例都默认为。

3)你必须让你的MainWindow实现INotifyPropertyChanged(更喜欢制作 一个MainWindowViewModel)并在你的setter中有你的属性RaisePropertyChanged。