绑定期间的DataContext范围

时间:2015-05-19 20:46:28

标签: wpf data-binding user-controls scope

我有查看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

也许我绑定的方式是问题?

1 个答案:

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

希望这有帮助。