[英]WPF: Binding Property from User Control to ViewModel
我有一個名為AntecedentControl的UserControl:
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}"/>
在此單獨視圖的ViewModel上,我有一個名為“ Antecedents”的屬性:
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。
如果是這樣,為什么不返回在Dependency Property語句中聲明的默認值?
感謝您的時間。
您的綁定似乎不正確。 您似乎正在嘗試訪問已創建的UserControl中的元素(AntecedentUserControl)?
除非為簡單起見而遺漏了一些代碼,否則實際上似乎根本不需要DependencyProperty? 有什么原因不能設置DataContext?
SomeView.xaml
<DomainTransmissionControls:AntecedentControl DataContext="{Binding Antecedents}" />
SomeViewModel.cs
private ObservableCollection<Antecedent> _antecedents;
public ObservableCollection<Antecedent> Antecedents
{
get
{
if (_antecedents == null)
_antecedents = new ObservableCollection<Antecedent>();
return _antecedents;
}
}
AntecedentControl.xaml
<UserControl>
<ScrollViewer>
<telerik:RadGridView ItemsSource="{Binding}" AutoGenerateColumns="False">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Section, Mode=TwoWay}"
Header="Seccion" IsFilterable="False" IsVisible="True" />
<!-- Additional column definitions. -->
</telerik:RadGridView.Columns>
</telerik:RadGridView>
</ScrollViewer>
</UserControl>
AntecedentControl.xaml.cs
public partial class AntecedentControl : UserControl
{
public AntecedentControl()
{
InitializeComponent();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.