我正在创建一个包含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();
}
}
由于
答案 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>
我现在不会解决答案,因为我想解释一下共鸣。 我知道它会尝试找到一个窗口控件的父窗口的父窗口,但它已经在窗口中声明,所以绑定为什么看不到他的名字控制窗口。
由于