在ContentPersenter中绑定Datagrid的ItemsSource

时间:2014-10-16 18:14:45

标签: c# wpf user-controls

我正在创建一个包含ContentPresenter的UserControl。我在窗口中使用Datagrid填充contentPresenter,将itemsSource绑定到列表,但它不起作用。

我的Datagrid是空的。但是当我从我的UserControl中移出Datagrid时,我得到了数据Inside。

我的用户控件 XAML:

<UserControl Name="Instance" ...>
    <Grid>
        <ScrollViewer>
            <ContentPresenter Content="{Binding Path=AdditionnalContent, ElementName=Instance}" />
        </ScrollViewer>
    </Grid>
</UserControl>

C#:

public Object AdditionnalContent
{
    get { return (object)GetValue(ContentProperty); }
    set { SetValue(ContentProperty, value); }
}

public static readonly DependencyProperty AdditionnalContentProperty = DependencyProperty.Register("AdditionnalContent", typeof(object), typeof(MyUserControl),
      new PropertyMetadata(null));

我的窗口

<Window Name="win" ...>
    <Grid>
        <my:MyUserControl>
            <my:MyUserControl.AdditionnalContent>
                <!-- Datagrid is empty -->
                <DataGrid ItemsSource="{Binding LIST, ElementName=win}" AutoGenerateColumns="True" />
            </my:MyUserControl.AdditionnalContent>
        </my:MyUserControl>

        <!-- Datagrid have content -->
        <DataGrid ItemsSource="{Binding LIST, ElementName=win}" AutoGenerateColumns="True" />
    </Grid>
</Window>

C#:

public partial class MainWindow : Window
{
    public List<Object> LIST
    {
        get;
        private set;
    }

    public MainWindow()
    {
        fillList();
        InitializeComponent();
    }
}

由于

2 个答案:

答案 0 :(得分:0)

您的绑定指向Window元素的属性,该元素不知道它是什么。它只知道的路径是Window

的属性

假设您的LIST位于Window的DataContext内。然后,您必须明确指向DataContext的{​​{1}}。

Window

答案 1 :(得分:0)

我用这段代码解决了我的问题

<Window Name="win" ...>
    <Grid>
        <my:MyUserControl>
            <my:MyUserControl.AdditionnalContent>
                <DataGrid ItemsSource="{Binding LIST, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
            </my:MyUserControl.AdditionnalContent>
        </my:MyUserControl>
    </Grid>
</Window>

我现在不会解决答案,因为我想解释一下共鸣。 我知道它会尝试找到一个窗口控件的父窗口的父窗口,但它已经在窗口中声明,所以绑定为什么看不到他的名字控制窗口。

由于