我有查看A ,其 UserControl U 包含自己的 UserControl UChild 。
当我设置A的DataContext时,UChild是否会使用直接绑定到其祖父母的属性来获取A的DataContext,即UChild中的 {Binding PropertyFromA} ?
我正在尝试实现这一点,但在我的情况下看起来像孙子没有得到DataContext。
编辑:
我使用的一些代码:
我的绑定发生在VM内部,其中BookList是一个ObindleableCollection,它被书籍填充:
/// <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;
}
}
简而言之,我在 BookPanelCtrl 中创建 BookCtrl 的实例 属于 MainView 。
也许我绑定的方式是问题?
答案 0 :(得分:1)
我想你想要这样的东西。在您的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
{1}}书的属性(我猜书有标题)。
希望这有帮助。