У меня есть только один datagrid в одном представлении, но коллекции, которые являются ItemsSource этого набора данных, находятся в разных моделях просмотра. Можно ли связать этот единственный datagrid с коллекциями в двух разных моделях?Связывание XAML с CompositeCollection
Для каждой строки в сетке отобразите элемент из одной коллекции и элемент из другой коллекции ..! для отображения всех столбцов в одной строке.
XAML:
DataContext="{DynamicResource ViewModelCombine}">
<Window.Resources>
<vm:ViewModelCombine x:Key="ViewModelCombine"/>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<DataGrid>
<DataGrid.Resources>
<CollectionViewSource x:Key="ViewModelPulse" Source="{Binding VP}"/>
<CollectionViewSource x:Key="ViewModeltherapy" Source="{Binding VT}"/>
</DataGrid.Resources>
<DataGrid.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding Source={StaticResource ViewModelCombine}, Path=VP}" />
<CollectionContainer Collection="{Binding Source={StaticResource ViewModelCombine}, Path=VT}" />
</CompositeCollection>
</DataGrid.ItemsSource>
<DataGrid.Columns>
<DataGridTextColumn Header="AMP" Binding="{Binding AMP}" Width="100"/>
<DataGridTextColumn Header="PW" Binding="{Binding PW}" Width="100" />
<DataGridTextColumn Header="DZ0" Binding="{Binding DZ0}" Width="100" />
<DataGridTextColumn Header="DELTA" Binding="{Binding DELTA}" Width="100" />
<DataGridTextColumn Header="DZ1" Binding="{Binding DZ1}" Width="100"/>
<DataGridTextColumn Header="M" Binding="{Binding M}" Width="100" />
<DataGridTextColumn Header="DZ2" Binding="{Binding DZ2}" Width="100" />
<DataGridTextColumn Header="N" Binding="{Binding N}" Width="100" />
</DataGrid.Columns>
</DataGrid>
</Grid>
xaml.cs:
public MainWindow()
{
InitializeComponent();
ViewModelCombine VMC = new ViewModelCombine();
this.DataContext = VMC;
}
ViewModelCombine.cs
public class ViewModelCombine
{
public ViewModelTherapy VT { get; set; }
public ViewModelPulse VP { get; set; }
public ViewModelCombine()
{
VT = new ViewModelTherapy();
VP = new ViewModelPulse();
}
}
В соответствии с выше код, он показывает, как этот Output ..но, хотел для отображения всех столбцов в одной строке.
. Можно ли связать этот единственный datagrid с коллекциями в двух разных моделях?
Благодарим за помощь.
. Учтите, что у VP есть: FirstName, LastName & VT имеет: ID, Salary as properties..Should отображать все свойства в одной строке (не как свойства VP в одной строке и свойства VT в другой строке, приведенные выше) ..благодаря. – Kumar
Тогда я полагаю, что то, что вы хотите, невозможно с моим или вашим подходом. Я бы предложил создать новую коллекцию, которая объединила бы VP и VT на основе их идентификаторов в один новый объект (если возможно, используя linq). И привяжите эту новую коллекцию к datagrid. В противном случае, используя композицию Composite, вы объедините две коллекции в одну, но вы не будете комбинировать их свойства, которые, я думаю, вы хотите сделать. –
Пробовал объединить два ObservableCollections и привязать Datagrid с помощью этого MergedCollection. Пожалуйста, обратитесь к этой ссылке. http://stackoverflow.com/q/40147381/7040506 – Kumar