2013-11-24 80 views
0

我正在創建一個UserControl「UC」。我有我的班級數據「AClass」。我想讓這個類的一個對象在我的UserControl中成爲一個DP。所以我把定義UC:UserControl中的DependencyProperty

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> 

我定義的 「一」 中的代碼隱藏文件:

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」包含默認值)。

這是什麼問題?

+0

在你的XAML中,你不是綁定屬性'A',而是'Activity'。故意的? – Clemens

回答

0

1)您的A DP如何可以是雙重型 AClass?

2)你很可能希望避免這樣做:

new FrameworkPropertyMetadata(new AClass()) 

因爲確切ACLASS比如你新的了就在那裏將所有的用戶控件實例共享 爲默認值。 3)你必須使你的MainWindow實現INotifyPropertyChanged(寧願讓 爲MainWindowViewModel),並讓你的屬性RaisePropertyChanged在它的setter中。

+0

1)Ooopps,對不起 - 我修改了一下代碼,使它更易讀並且犯了這個錯誤 - 謝謝。 2.)我可以忽略「註冊」中的第四個參數嗎? 3.)我會試一試,讓你很快知道結果。 –

相關問題