我想使用resp将嵌套的DataGrid
(RowDetailsTemplate
)绑定到不同的数据对象。到外部DataGrid
的数据对象。
它适用于外部对象"外部"但是如何访问内部数据对象"内部"。
xaml:
<Window.Resources>
<local:MainWindowModel x:Key="vm"/>
</Window.Resources>
<Grid Name="grdMain" Height="170" VerticalAlignment="Top" DataContext="{Binding Source={StaticResource vm}}">
<DataGrid x:Name="datagridOuter"
ItemsSource="{Binding Outer}"
AutoGenerateColumns="False"
Height="170">
<DataGrid.Columns>
<DataGridTextColumn Header="Outer"
Binding="{Binding Path=Name}"
MinWidth="150"/>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid Name="datagridInner"
ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}, Path=DataContext.Inner}"
Height="50"
AutoGenerateColumns="False"
IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Inner"
Binding="{Binding Path=Name}"
MinWidth="150"/>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
</Grid>
Item类:
public class Item
{
public string Name { get; set; }
public Item ( string name_ )
{
this.Name = name_;
}
} //eoClass
MainWindowModel类:
class MainWindowModel : Notifier
{
public ObservableCollection<Item> outer;
public ObservableCollection<Item> Outer
{
get { return this.outer; }
set
{
this.outer = value;
OnPropertyChanged ( "Outer" );
}
}
public ObservableCollection<Item> inner;
public ObservableCollection<Item> Inner
{
get { return this.inner; }
set
{
this.inner = value;
OnPropertyChanged ( "Inner" );
}
}
} //eoClass
答案 0 :(得分:0)
查找Grid
类型的祖先可能非常烦人,因为大多数控件都包含一些嵌套的Grid
。我个人试图避免这种情况。
例如,当您查看DataGrid的VisualLiveTree时,您会发现一些事件:
你没有得到绑定的原因是FindAncestor
将从绑定目标开始,并向上搜索VisualTree中的所有父项,直到它找到第一个Grid
。你的grdMain
可能是这个链中的最后一个。
所以你已经给了Grid
一个名字,就这样使用它。
更改内部ItemSource
绑定:
ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}, Path=DataContext.Inner}"
为:
ItemsSource="{Binding ElementName=grdMain, Path=DataContext.Inner}"
会做到这一点。它将在使用名称grdMain
指定的元素中查找请求的绑定。
根据您的评论,我回滚了我的答案,以满足您的需求。
在MainWindowModel视图中,两个集合Inner和Outer之间没有耦合。耦合在底层数据模型中完成。 &#34;内部&#34;集合在底层数据模型中更新,以便&#34;内部&#34;集合对应于&#34;外部&#34;的实际选择数据。采集。我的问题是,如何应用details-datagrid和&#34; Inner&#34;的绑定。集合。