将动态数据绑定到rowdetails模板中的wpf datagrid

Mus*_*mil 4 c# wpf xaml datagrid wpftoolkit

我有一个数据网格说Datagrid1,其中填充了List(动态地通过代码隐藏).在datagrid的行详细信息模板里面,我想添加一个datagrid,让我们调用datagrid2,datagrid2需要在Datagrid1的SelectionChange事件上用List动态地进行poupulated?访问datagrid2并将其绑定到数据源需要在后面的代码中完成.可以用这个来帮助我吗?我的xaml是:

<Grid>
        <my:DataGrid    Name="dataGrid1" ItemsSource="{Binding}">
            <my:DataGrid.RowDetailsTemplate>
                <DataTemplate>
                    <my:DataGrid Name="dataGrid2"></my:DataGrid>
                </DataTemplate>
            </my:DataGrid.RowDetailsTemplate>
        </my:DataGrid>
    </Grid>
Run Code Online (Sandbox Code Playgroud)

Flo*_* Gl 6

通过绑定来做它会容易得多.您可以将一组DetailElements添加到dataGrid1的ItemsSource的每个元素中.现在,您所要做的就是将此集合绑定到dataGrid2的ItemsSource,并通过绑定自动填充数据.

public class DataGrid1SourceItem
{
    public ObservableCollection<DetailItem> DetailItems {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

XAML:

<Grid>
    <my:DataGrid    Name="dataGrid1" ItemsSource="{Binding}">
        <my:DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <my:DataGrid Name="dataGrid2" ItemsSource="{Binding Path=DetailItems}"></my:DataGrid>
            </DataTemplate>
        </my:DataGrid.RowDetailsTemplate>
    </my:DataGrid>
</Grid>  
Run Code Online (Sandbox Code Playgroud)

编辑:要根据DataGrid单元格值搜索数据库,您必须将此值添加到ViewModel中.为此,创建一个属性(在我的示例中ProductName)并将其绑定到DataGridColumn的Binding属性(Mode = TwoWay).然后你可以拥有一个包含所有产品的私有字段,并在dataGrid2 ItemsSources集合中过滤此字段:

public class DataGrid1SourceItem
{
    private List<DetailItems> _allDetailItems = new List<DetailItems>();
    public IEnumerable<DetailItem> DetailItems 
    {
       get { return _allDetailItems.Where(item => item.Name == ProductName); }
    } 

    public DataGrid1SourceItem()
    {
       // load your products into _allDetailItems
    }

    private string _productName;
    public string ProductName
    {
        get { return _productName; }
        set
        {
            _productName= value;
            OnPropertyChanged("ProductName");
            OnPropertyChanged("DetailItems");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)