【发布时间】:2018-07-20 12:59:44
【问题描述】:
我有带有 Combobox 和 Button 的 WPF 应用程序。在我在文本框中输入值并按下按钮后,文本框中的值应该出现在组合框的更新列表中。我正在尝试使用 MVVM 并绑定到组合框来实现这一点。这是 ViewModel 的部分代码。
public class ViewModel:INotifyPropertyChanged
{
DomainLogic dl = new DomainLogic();
public event PropertyChangedEventHandler PropertyChanged;
private ObservableCollection<string> expenseCategories = new ObservableCollection<string>();
public ObservableCollection<string> ExpenseCategories
{
get
{
return expenseCategories;
}
set
{
expenseCategories = value;
OnPropertyChanged("ExpenseCategories");
}
}
public ViewModel()
{
expenseCategories = new ObservableCollection<string>(dl.GetExpenseCategories());
}
private void OnPropertyChanged(string property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
另外我正在使用 EF 访问 DB,DomainLogic 类有一个列出所有费用类别的方法。
这是来自窗口的代码隐藏:
DomainLogic dl = new DomainLogic();
public Window1()
{
InitializeComponent();
DataContext = new ViewModel();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
if (!string.IsNullOrWhiteSpace(textBox.Text))
{
dl.CreateNewExpenseCategory(textBox.Text);
}
else
{
MessageBox.Show("Enter category!");
}
}
这里也是 XAML:
<ComboBox x:Name="ExpCategory" HorizontalAlignment="Left" Margin="72,50,0,0" VerticalAlignment="Top" Width="130" ItemsSource="{Binding ExpenseCategories, UpdateSourceTrigger=PropertyChanged}" />
当我添加新类别时,组合框不会更新。我是整个 MVVM 模式的新手,我想我在这里遗漏了一些东西。
//编辑
public void CreateNewExpenseCategory(string name)
{
using (var context = new ExpenseEntities())
{
ExpenseCategory category = new ExpenseCategory() { CategoryName = name};
context.ExpenseCategory.Add(category);
context.SaveChanges();
}
}
【问题讨论】:
-
输出窗口有错误吗?
-
@RackM 没有错误
-
它是如何制作的(dl.CreateNewExpenseCategory(textBox.Text))?
-
@Babbillumpa 编辑有问题
标签: c# wpf entity-framework mvvm viewmodel