C# WPF中的DataGrid数据绑定和MVVM
一个WPF应用程序,它有一个C# WPF中的DataGrid数据绑定和MVVM,c#,wpf,mvvm,data-binding,observablecollection,C#,Wpf,Mvvm,Data Binding,Observablecollection,一个WPF应用程序,它有一个窗口,其中包含一个数据网格,试图实现MVVM体系结构。只有一个模型类: public class Book { public int id {get; set;} public string title {get; set;} public string isbn {get; set;} } 这是ViewModel: class BookViewModel { public ObservableCollection<Book&g
窗口
,其中包含一个数据网格
,试图实现MVVM体系结构。只有一个模型类:
public class Book
{
public int id {get; set;}
public string title {get; set;}
public string isbn {get; set;}
}
这是ViewModel:
class BookViewModel
{
public ObservableCollection<Book> Books;
public BookViewModel()
{
Books = new ObservableCollection<Book>();
// TODO: execute LoadData comand
}
}
App.xaml的代码隐藏:
public partial class App : Application
{
[STAThread()]
public static void Main()
{
App app = new App();
app.InitializeComponent();
app.Run();
}
// bind application and show main window on startup
// data context is default source of bindings
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
View.MainWindow mainWin = new View.MainWindow();
ViewModel.BookViewModel bookViewModel = new ViewModel.BookViewModel();
mainWin.DataContext = bookViewModel;
mainWin.Show();
}
}
我正在从WinForms过渡到WPF,发现WPF的某些方面令人困惑。努力实现的目标和面临的问题如下:
命令应该清理LoadData
,然后从数据库中再次填充它。数据库连接已经实现。到目前为止,我不知道如何使数据绑定工作GridView
命令应通过菜单和按钮(已实现)执行LoadData
- 应用程序启动时应执行
命令。这使得LoadData
在启动时会被填充DataGrid
public MainWindow()
{
IntializeComponent();
DataContext = new BookViewModel();
}
您的loadData命令将在BookViewModel中实现
private bool _canLoadDataExecute;
private ICommand _loadDataCommand;
public Icommand LoadDataCommand => _loadDataCommand ?? _loadDataCommand = new RelayCommand((obj) => LoadDataCommand = LoadData(), canLoadDataExecute);
public void LoadData()
{
}
要使上述代码正常工作,您还需要实现RelayCommand.cs,可在此处找到此代码:。此外,通过RelayCommand实现,在线上还有许多其他有用的答案和资源。第一步:您创建了一个窗口及其视图模型,并通过DataContext将它们连接起来。已经做了
View.MainWindow mainWin = new View.MainWindow();
ViewModel.BookViewModel bookViewModel = new ViewModel.BookViewModel();
mainWin.DataContext = bookViewModel;
第二步:修复(添加)xaml中的绑定:
<DataGrid Name="BooksDataGrid" ItemsSource="{Binding Books}">
<DataGrid.Columns>
<DataGridTextColumn Header="Title" Width="200" Binding="{Binding title}"/>
<DataGridTextColumn Header="isbn" Width="200" Binding="{Binding isbn}"/>
</DataGrid.Columns>
</DataGrid>
第三步:修复绑定到工作的视图模型-绑定使用属性:
class BookViewModel
{
public ObservableCollection<Book> Books { get; private set; }
public BookViewModel()
{
Books = new ObservableCollection<Book>();
}
}
类BookViewModel
{
公共可观测收集书籍{get;private set;}
PublicBookViewModel()
{
图书=新的可观察到的集合();
}
}
第四步:在视图模型中实现load data方法,并在
mainWin.Show()之后从命令调用它
加载初始数据为什么要在窗口中编写代码
代码隐藏而不是视图模型?@PavelAnikhouski正在学习一个教程。是什么让你认为这是MVVM…?最有用的答案。问题是,可观察收集
不是一个属性。
<DataGrid Name="BooksDataGrid" ItemsSource="{Binding Books}">
<DataGrid.Columns>
<DataGridTextColumn Header="Title" Width="200" Binding="{Binding title}"/>
<DataGridTextColumn Header="isbn" Width="200" Binding="{Binding isbn}"/>
</DataGrid.Columns>
</DataGrid>
class BookViewModel
{
public ObservableCollection<Book> Books { get; private set; }
public BookViewModel()
{
Books = new ObservableCollection<Book>();
}
}