用toolkit.mvvm框架更新datagrid,在[RelayCommand]中绑定的代码中可以更新datagrid,同样的代码放到代码块中调用就无法更新datagrid。
(使用vs2022community编程)
[RelayCommand]
private void AddNew()
{
Employees.Add(new Employee { CardId = "138", OrganizationName = "Raj" });//可以对datagrid进行更新
//LoadExcelToList2();//这个不能更新datagrid不知道为什么,代码一样啊
}
使用这段代码无法更新,不知道为什么
[RelayCommand]
private void AddNew()
{
LoadExcelToList2();//这个不能更新datagrid不知道为什么,代码一样啊
}
public static void LoadExcelToList2()
{
var MyVM = new ViewModel();
MyVM.Employees.Add(new Employee { CardId = "168", OrganizationName = "Raj"});
}
完整代码如下:
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System.ComponentModel;
using System.Windows;
namespace WpfToolkitTest
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
//DataContext = new ViewModel();
}
}
public partial class ViewModel : ObservableObject
{
public BindingList Employees { get; set; }
public ViewModel()
{
Employees = new BindingList();
}
[RelayCommand]
private void AddNew()
{
Employees.Add(new Employee { CardId = "138", OrganizationName = "Raj" });//可以对datagrid进行更新
//LoadExcelToList2();//这个不能更新datagrid不知道为什么,代码一样啊
}
public static void LoadExcelToList2()
{
var MyVM = new ViewModel();
MyVM.Employees.Add(new Employee { CardId = "168", OrganizationName = "Raj"});
}
}
}
using CommunityToolkit.Mvvm.ComponentModel;
namespace WpfToolkitTest
{
public partial class Employee : ObservableObject
{
public string OrganizationName { get; set; }
[ObservableProperty]
private string cardId;//读卡器读取的卡号
}
}
"WpfToolkitTest.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:local="clr-namespace:WpfToolkitTest"
xmlns:hc="https://handyorg.github.io/handycontrol"
Title="{Binding Title}"
Width="900"
Height="600"
WindowStartupLocation="CenterScreen"
mc:Ignorable="d" >
"5">
"0,5,0,0"
Spacing="10"
DockPanel.Dock="Bottom"
Orientation="Horizontal">
var MyVM = new ViewModel();
这里创建了新的模型,不是原来的那个
感谢threenewbee 的回答
我将上面的旧代码改成下面的新代码成功了,但是不知道原理,还请大师详细讲来。
//旧代码
[RelayCommand]
private void AddNew()
{
LoadExcelToList2();//这个不能更新datagrid不知道为什么,代码一样啊
}
public static void LoadExcelToList2()
{
var MyVM = new ViewModel();
MyVM.Employees.Add(new Employee { CardId = "168", OrganizationName = "Raj"});
}
如下改过的新代码
```c#
//新代码
[RelayCommand]
private void AddNew()
{
//Employees.Add(new Employee { CardId = "138", OrganizationName = "Raj" });//可以对datagrid进行更新
LoadExcelToList2();//这个也可以对datagrid进行更新
}
private void LoadExcelToList2()
{
Employees.Add(new Employee { CardId = "168", OrganizationName = "Raj"});
}
```