绑定期间的 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 包含 Books:

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 属性(我猜书有标题)。

希望对您有所帮助。