绑定期间的 DataContext 范围
DataContext scope during binding
我有一个 View A,它有一个 UserControl U 包含它自己的 UserControl UChild .
当我设置 A 的 DataContext 时,UChild 是否会通过直接绑定到其祖父母的 属性 来获取 A 的 DataContext,即 { Binding PropertyFromA } 在 UChild 中?
我正在努力实现这一点,但在我的情况下孙子似乎没有获得 DataContext。
编辑:
我使用的一些代码:
我的绑定发生在 VM 内部,其中 BookList 是一个充满书籍的 ObservableCollection:
/// <summary>
///
/// </summary>
public bool FillBooksCtrlList()
{
List<Book> list = DBHelper.GetRecipes();
if (list == null)
{
return false;
}
else
{
BookList = new ObservableCollection<Book>(list);
foreach (Book book in BookList)
{
BookCtrlList.Add(new BookCtrl { DataContext = book, Margin = new Thickness(0, 10, 10, 0) });
}
return true;
}
}
In short, I am creating an instance of BookCtrl inside BookPanelCtrl
that belongs to the MainView.
可能是我绑定的方式有问题?
我想你想要这样的东西。在您的 ViewModel 中,您有一个 ObservableCollection
包含 Book
s:
public class SomeViewModel {
private ObservableCOllection<Book> _books;
public ObservableCollection<Book> Books
{
get
{
return _books;
}
set
{
_books = value;
RaisePropertyChanged("Books");
}
}
}
public bool FillBooksCtrlList()
{
List<Book> list = DBHelper.GetRecipes();
if (list == null)
{
return false;
}
else
{
Books = new ObservableCollection<Book>(list);
return true;
}
}
然后,在您的视图中,您可能会看到类似的内容:
<UserControl DataContext="SomeViewModel">
<ListBox ItemsSource="{Binding Books}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Title}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</UserControl>
这样 UserControl
绑定到 ViewModel,ListBox
绑定到您的 Book
列表,ListBox
中的每个项目绑定到一本书的 Title
属性(我猜书有标题)。
希望对您有所帮助。
我有一个 View A,它有一个 UserControl U 包含它自己的 UserControl UChild .
当我设置 A 的 DataContext 时,UChild 是否会通过直接绑定到其祖父母的 属性 来获取 A 的 DataContext,即 { Binding PropertyFromA } 在 UChild 中?
我正在努力实现这一点,但在我的情况下孙子似乎没有获得 DataContext。
编辑:
我使用的一些代码:
我的绑定发生在 VM 内部,其中 BookList 是一个充满书籍的 ObservableCollection:
/// <summary>
///
/// </summary>
public bool FillBooksCtrlList()
{
List<Book> list = DBHelper.GetRecipes();
if (list == null)
{
return false;
}
else
{
BookList = new ObservableCollection<Book>(list);
foreach (Book book in BookList)
{
BookCtrlList.Add(new BookCtrl { DataContext = book, Margin = new Thickness(0, 10, 10, 0) });
}
return true;
}
}
In short, I am creating an instance of BookCtrl inside BookPanelCtrl that belongs to the MainView.
可能是我绑定的方式有问题?
我想你想要这样的东西。在您的 ViewModel 中,您有一个 ObservableCollection
包含 Book
s:
public class SomeViewModel {
private ObservableCOllection<Book> _books;
public ObservableCollection<Book> Books
{
get
{
return _books;
}
set
{
_books = value;
RaisePropertyChanged("Books");
}
}
}
public bool FillBooksCtrlList()
{
List<Book> list = DBHelper.GetRecipes();
if (list == null)
{
return false;
}
else
{
Books = new ObservableCollection<Book>(list);
return true;
}
}
然后,在您的视图中,您可能会看到类似的内容:
<UserControl DataContext="SomeViewModel">
<ListBox ItemsSource="{Binding Books}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Title}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</UserControl>
这样 UserControl
绑定到 ViewModel,ListBox
绑定到您的 Book
列表,ListBox
中的每个项目绑定到一本书的 Title
属性(我猜书有标题)。
希望对您有所帮助。