我有一個UserControl,我們將其稱爲「Header」。它有一個叫做專案編號的DependencyProperty,這種控制有一個視圖模型,我將其設置爲在DataContext:DataContext,DependencyProperties和綁定
public BillingInfoHeaderControlVM VM
{
get
{
return (BillingInfoHeaderControlVM)DataContext;
}
set
{
DataContext = value;
}
}
public static readonly DependencyProperty ProjectIDProperty =
DependencyProperty.Register("ProjectID", typeof(int), typeof(BillingInfoHeaderControl), new PropertyMetadata();
public int ProjectID
{
set
{
SetValue(ProjectIDProperty, value);
}
get
{
return (int)GetValue(ProjectIDProperty);
}
}
現在我想做的事,是綁定控件的專案編號這種控制的專案編號:
<controls:Header Grid.Row ="0" x:Name="Header" ProjectID="{Binding ProjectID, Mode=OneWay}"></controls:Header>
現在,當我運行它,我得到一個錯誤,指出「
物業GET方法沒有找到InitializeControl()方法。
從我正在閱讀,我看到這是因爲綁定ProjectID是相對於控件的數據上下文。當然,我可以內結合設置的ElementName:
<controls:Header Grid.Row ="0" x:Name="Header" ProjectID="{Binding ProjectID, Mode=OneWay, ElementName=ParentControl}"></controls:Header>
但這是醜,說實話,我們不想記住要爲這個控制每當我們使用它做到這一點。我還有什麼其他選擇?有沒有辦法將綁定的源設置爲使用父級的DataContext?
的專案編號是不是也該視圖模型的屬性?如果沒有,爲什麼不呢,這是ViewModel的角色。 – AnthonyWJones 2011-06-14 15:14:05