Как добавить данные из ComboBox в DataGrid
Имеются две модели и две коллекции данных. В первую коллекцию добавляются "Категории", во вторую "Расходы". При добавлении новой "Категории" все работает корректно, данные отображаются в DataGrid. В ComboBox привязаны данные коллекции "Категории". При добавление данных в "Расходы" добавляются все, кроме категории. Как реализовать добавление нужной категории в коллекцию "Расходы" и корректно отобразить ее в DataGrid?
public class Expenses: BaseViewModel
{
public ObservableCollection<Сategories> categories ;
public string comment;
public int sum;
public DateTime datetime = DateTime.Now;
public string Comment
{
get { return comment; }
set { comment = value; }
}
public int Sum
{
get { return sum; }
set { sum = value; }
}
public DateTime DateTime
{
get { return datetime; }
set { datetime = value; }
}
public ObservableCollection<Сategories> Categories
{
get { return categories; }
set { categories = value; }
}
}
public class Сategories : BaseViewModel
{
public string category;
public string Category
{
get { return category; }
set { category = value; }
}
}
public class MainWindowsViewsModel : BaseViewModel
{
public ObservableCollection<Expenses> ExpensesCollection { get; set; }
public ObservableCollection<Сategories> CategoriesCollection { get; set; }
public Сategories Сategories { get; set; } = new Сategories();
public Expenses Expenses { get; set; } = new Expenses();
public MainWindowsViewsModel()
{
CategoryCommand = new LambdaCommand(OnCommandExecuted , CanCommandExecute);
ExpensesCommand = new LambdaCommand(OnExpensesCommandExecuted, CanExpensesCommandExecute);
CategoriesCollection = new ObservableCollection<Сategories>
{
new Сategories {Category = "Продукты питания"}
};
ExpensesCollection = new ObservableCollection<Expenses>
{
new Expenses
{
Sum = 1000,
Comment = "Hello",
DateTime = DateTime.Now,
Categories = CategoriesCollection
}
};
}
public ICommand CategoryCommand { get; }
private bool CanCommandExecute(object p)
{
return true;
}
private void OnCommandExecuted(object text)
{
CategoriesCollection.Add(Сategories);
}
public ICommand ExpensesCommand { get; }
private bool CanExpensesCommandExecute(object p)
{
return true;
}
private void OnExpensesCommandExecuted(object text)
{
ExpensesCollection.Add(Expenses);
}
}
<Window x:Class="TestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm ="clr-namespace:TestApp.ViewModels"
xmlns:cmd ="clr-namespace:TestApp.Commands"
xmlns:local="clr-namespace:TestApp"
mc:Ignorable="d"
Title="Программа учета расходов" Height="450" Width="800">
<Window.DataContext>
<vm:MainWindowsViewsModel/>
</Window.DataContext>
<DockPanel>
<TabControl>
<TabItem Header="Расходы">
<DockPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<DataGrid Grid.Column="0"
ItemsSource="{Binding ExpensesCollection}"
SelectedItem="{Binding Expenses}"
AutoGenerateColumns="False" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Категория" Width="Auto" Binding="{Binding Path=Categories}" IsReadOnly="True"/>
<DataGridTextColumn Header="Сумма" Width="Auto" Binding="{Binding Sum}"/>
<DataGridTextColumn Header="Дата" Width="Auto" Binding="{Binding DateTime, StringFormat=dd.MM.yyyy}"/>
<DataGridTextColumn Header="Комментарий" Width="*" Binding="{Binding Comment}"/>
</DataGrid.Columns>
</DataGrid>
<DockPanel Grid.Column="1">
<UniformGrid DockPanel.Dock="Bottom" HorizontalAlignment="Right">
<Button Content="OK" Margin="10,0" Padding="35,5" IsDefault="True"
Command="{Binding ExpensesCommand}"/>
</UniformGrid>
<Grid Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="0" Text="Период"/>
<DatePicker SelectedDate="{Binding Expenses.DateTime}" Grid.Column="1" Grid.Row="0"/>
<TextBlock Grid.Column="0" Grid.Row="1" Text="Категория"/>
<ComboBox SelectedItem="{Binding Expenses.Categories}" Grid.Column="1" Grid.Row="1"
ItemsSource="{Binding CategoriesCollection}"
DisplayMemberPath="Category">
</ComboBox>
<TextBlock Grid.Column="0" Grid.Row="2" Text="Стоимость"/>
<TextBox Grid.Column="1" Grid.Row="2"
Text="{Binding Expenses.Sum}"/>
<TextBlock Grid.Column="0" Grid.Row="3" Text="Комментарий"/>
<TextBox Grid.Column="1" Grid.Row="3"
Text="{Binding Expenses.Comment}"/>
</Grid>
</DockPanel>
</Grid>
</DockPanel>
</TabItem>
<TabItem Header="Категории">
<StackPanel>
<TextBlock Text="Введите наименование категори" Margin="5" FontSize="14"/>
<WrapPanel >
<TextBox Text="{Binding Сategories.Category}" Width="300"/>
<Button Grid.Column="1" Height="20" Content="Добавить" Margin="5"
Command="{Binding CategoryCommand}"/>
</WrapPanel>
<TextBlock Text="Наименование" HorizontalAlignment="Center" FontSize="14"/>
<Grid >
<DataGrid ItemsSource="{Binding CategoriesCollection}"
AutoGenerateColumns="False" CanUserAddRows="False" >
<DataGrid.Columns>
<DataGridTextColumn Header="Категория" Width="*" Binding="{Binding Category}" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</StackPanel>
</TabItem>
</TabControl>
</DockPanel>
