我有一個名爲AntecedentControl用戶控件:WPF:從用戶控制結合性視圖模型
的XAML:
<UserControl x:Name="AntecedentUserControl">
<ScrollViewer DataContext="{Binding ElementName=AntecedentUserControl}">
<telerik:RadGridView ItemsSource="{Binding Path=AntecedentList}"
AutoGenerateColumns="False"
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Section, Mode=TwoWay}"
Header="Seccion"
IsVisible="True"
IsFilterable="False"/>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Group, Mode=TwoWay}"
Header="Grupo"
IsVisible="True"
IsFilterable="False"/>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Tome, Mode=TwoWay}"
Header="Tomo"
IsVisible="True"
IsFilterable="False"/>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Volume, Mode=TwoWay}"
Header="Volumen"
IsVisible="True"
IsFilterable="False"/>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Inscription, Mode=TwoWay}"
Header="Inscripcion"
IsVisible="True"
IsFilterable="False"/>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Bis, Mode=TwoWay}"
Header="Bis"
IsVisible="True"
IsFilterable="False"/>
<telerik:GridViewColumn>
<telerik:GridViewColumn.CellTemplate>
<DataTemplate>
<telerik:RadButton Content="Delete"
Command="telerikGrid:RadGridViewCommands.Delete"
CommandParameter="{Binding}"/>
</DataTemplate>
</telerik:GridViewColumn.CellTemplate>
</telerik:GridViewColumn>
</telerik:RadGridView.Columns>
</telerik:RadGridView>
</ScrollViewer>
代碼隱藏(C#):
public partial class AntecedentControl : UserControl
{
public ObservableCollection<Antecedent> AntecedentList
{
get { return (ObservableCollection<Antecedent>)GetValue(AntecedentListProperty); }
set { SetValue(AntecedentListProperty, value); }
}
public static readonly DependencyProperty AntecedentListProperty =
DependencyProperty.Register("AntecedentList",
typeof(ObservableCollection<Antecedent>),
typeof(AntecedentControl),
new FrameworkPropertyMetadata(new ObservableCollection<Antecedent>(), OnListPropertyChanged));
private static void OnListPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
var antecedentList = source as AntecedentControl;
var value = e.NewValue as ObservableCollection<Antecedent>;
antecedentList.AntecedentList = value;
}
public AntecedentControl()
{
InitializeComponent();
}
}
而且,在一個單獨的視圖中,我打電話給這個UserControl,像這樣:
<DomainTransmissionControls:AntecedentControl AntecedentList="{Binding ElementName=AntecedentUserControl, Path=Antecedents, Mode=TwoWay}"/>
在這個單獨的視圖的視圖模型,我已經叫物業「前因」:
public ObservableCollection<Antecedent> Antecedents { get; set; }
在簡單的話:AntecedentControl UC是有一個方法,你可以添加/編輯網格所述網格上的項目。當前UC的屬性「AntecedentList」是列表正被「保存」的地方。
其中'AntecedentControl'被調用的其他UC的ViewModel的屬性'Antecedents'應該綁定到AntecedentControl UC的'AntecedentList'。
我想知道如何將ViewModel上的這個屬性綁定到在單獨UserControl(AntecedentControl)中找到的屬性'AntecedentList'屬性,因爲這個當前代碼返回null。
我相信AntecedentControl UC上的DependencyProperty聲明有問題,因爲在'OnListPropertyChanged'方法上放置斷點顯示e.NewValue返回null。
如果是這樣,爲什麼不返回在依賴屬性語句中聲明的默認值?
謝謝你的時間。
只是注意:你的'OnListPropertyChanged'是多餘的,因爲它僅設置屬性的值一次。當屬性值已更改時,會調用依賴項屬性更改回調。您不必再次設置該值。 – Clemens
另外,您不應該使用集合實例作爲您的依賴項屬性的默認值。請參閱[這裏](http://msdn.microsoft.com/en-us/library/aa970563.aspx#initializing)以獲取解釋。 – Clemens
@Clemens感謝您的評論,但關於默認值,這不應該是一個只讀依賴屬性,所以在您發佈的文章中設置它就會破壞我的代碼,因爲我需要UC能夠添加/編輯其他UC內的物品。 – Xanagandr