我有一个名为Clients的ObservableCollection,它包含一个客户端列表,然后显示在ListView中。目前,每当添加新客户端时,List View会自动更新,这很好。但是它不会将客户端添加到数据库中,这是我希望发生的事情。
目前,我在ClientBtn_Click函数中调用“ClientData.AddClientData(client);”将其添加到数据库中,但我希望它以绑定的方式自动发生,与它更新UI的方式相同。
如何在ObservableCollection更改时触发数据库更改?
模型
public class Order
{
public int Id { get; set; }
public float Amount { get; set; }
public DateTime Date { get; set; }
public Client Client {get; set;}
}
public class Client
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
字符串
查看型号:
public class ViewModelBase : ObservableObject {}
public partial class ClientViewModel : ViewModelBase
{
public ObservableCollection<Client> Clients { get; set; }
public ClientViewModel() {}
}
public partial class OrderViewModel: ViewModelBase
{
public ObservableCollection<Order> Orders { get; set; }
public OrderViewModel() {}
}
型
视图:MainWindow.xaml
<StackPanel x:Name="selectClientsPanel" HorizontalAlignment="Center">
<ListView x:Name="clientsList" BorderThickness="1" Width="350" Height="Auto" HorizontalAlignment="Left"
ItemsSource="{Binding Path=Clients, Mode=TwoWay}">
<ListView.ItemTemplate>
<DataTemplate x:DataType= "model:Client">
<TextBlock Text="{x:Bind FirstName}" x:Phase="1" Margin="0,5,0,5"/>
<TextBlock Text="{x:Bind LastName}" x:Phase="1" Margin="0,5,0,5"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<StackPanel Margin="30">
<TextBox x:Name="firstNameBox" Header="Enter first name:" PlaceholderText="First Name" />
<TextBox Name="lastNameBoxBox" Width="250" Margin="0,0,8,0"
Header="Enter last name:" PlaceholderText="Last Name"/>
<Button x:Name="createClientBtn" Click="createClientBtn_Click">Create Client</Button>
</StackPanel>
</StackPanel>
型
MainWindow.xaml.cs:
public sealed partial class MainWindow : Window
{
public ClientViewModel ViewModel { get; }
public MainWindow()
{
this.InitializeComponent();
ViewModel = App.GetService<ClientViewModel>();
clientsList.ItemsSource = ViewModel.Clients;
}
private void createClientBtn_Click(Object sender, RoutedEventArgs e)
{
if (firstNameBox.Text.Length > 0 && lastNameBox.Text.Length)
{
Client client=new User(firstNameBox.Text, lastNameBox.Text);
ViewModel.Clients.Add(client);
ClientData.AddClientData(client); //I want to call this automatically somehow
}
}
}
型
数据库相关代码:
public class DataContext : DbContext
{
public DbSet<Client> Clients { get; set; }
public DbSet<Order> Orders { get; set; }
}
public static class ClientData
{
public static void AddClientData(Client client)
{
using (var db = new CaseNoteManagerContext())
{
db.Add(client);
db.SaveChanges();
}
}
public static List<Client> GetClients()
{
using (var db = new DataContext())
{
return db.Clients.ToList();
}
}
}
public static class OrderData
{
public static void AddOrderData(Order order)
{
using (var db = new DataContext())
{
db.Add(order);
db.SaveChanges();
}
}
}
型
1条答案
按热度按时间ryhaxcpt1#
您可以使用
ObservableCollection
的CollectionChanged
事件:个字符