Для «правильного» способа потребуется три вещи:
- MainWindow
- UserControl
- ViewModel
В ViewModel вы хотите создать свой ObservableCollection и установить его как свойство в ViewModel, например так:
public class MyListViewModel
{
public MyViewModel()
{
MyObjects = new ObservableCollection<MyObject>();
// Add items to collection
}
public ObservableCollection<MyObject> MyObjects{ get; set; }
}
Затем в методе Initialize вашего UserControl вы хотите создать экземпляр ViewModel и присоединить его кDataContext для этого UserControl:
public AgentListView()
{
InitializeComponent();
DataContext = new MyViewModel();
}
Примечание: это намного проще, если вы используете контейнер IoC для обработки разрешений зависимостей для вас, но для простоты я здесь пропускаю.
В вашем UserControl вы хотите указать DataContext для UserControl, а затем отдельные привязки для вашей DataGrid и столбцов:
<UserControl x:Class="UserControls.Views.AgentDataGridView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
xmlns:utility="clr-namespace:UserControls.Utility"
mc:Ignorable="d"
d:DataContext="{Binding}">
<GroupBox Header="Agent States" Height="auto" Margin="0,5,0,0" Name="_groupBox" VerticalAlignment="Top" BorderBrush="DarkSlateBlue">
<Grid Name="_grid" ShowGridLines="True" Margin="5" >
<toolkit:DataGrid
ItemsSource="{Binding MyObjects, Mode=OneWay}">
<toolkit:DataGrid.Columns>
<toolkit:DataGridTextColumn Binding="{Binding StateAndJobDescription, Mode=OneWay, NotifyOnSourceUpdated=True,UpdateSourceTrigger=PropertyChanged}" Header="State" Width="100" IsReadOnly="True" />
<toolkit:DataGridTextColumn Binding="{Binding SubStateDescription, Mode=OneWay, NotifyOnSourceUpdated=True,UpdateSourceTrigger=PropertyChanged}" Header="City" Width="120" IsReadOnly="True" />
</toolkit:DataGrid.Columns>
</toolkit:DataGrid>
</Grid>
</GroupBox>
</UserControl>
Отсюда вам просто нужно добавить UserControl вваше главное окно.