gpt4 book ai didi

WPF DataGrid 在代码中更新其 ItemsSource 时不更新 UI

转载 作者:行者123 更新时间:2023-12-03 11:02:50 25 4
gpt4 key购买 nike

当 WPF DataGrid 在其 ObservableCollection 的项目中更改代码时,我应该怎么做?

<DataGrid HorizontalAlignment="Left" Height="100" Margin="54,25,0,0" VerticalAlignment="Top" Width="264" 
IsSynchronizedWithCurrentItem="True" AutoGenerateColumns="False"
ItemsSource="{Binding DataSource}" SelectedItem="{Binding SelectedPerson}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding FirstName}" />
<DataGridTextColumn Binding="{Binding LastName}" />
</DataGrid.Columns>
</DataGrid>

我更新 SelectedPerson.FirstName在代码和 DataSource 的 setter 中执行。当前 DataSource.FirstName已更新,但 DataGrid 不显示更改。如果我单击列标题,DataGrid 会刷新并显示更改的数据。当我使用 MVVM 并且我没有对 DataGrid 的引用时,如何让它迅速刷新?
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}

public class VM : Notifier
{
private ObservableCollection<Person> dataSource;
public ObservableCollection<Person> DataSource
{
get { return dataSource; }
set
{
dataSource = value;
OnPropertyChanged("DataSource");
}
}

private Person selectedPerson;
public Person SelectedPerson
{
get { return selectedPerson; }
set
{
selectedPerson = value;
OnPropertyChanged("SelectedPerson");
}
}

private string string1;
public string String1
{
get { return string1; }
set
{
string1 = value;
OnPropertyChanged(String1);
}
}

public VM()
{
String1 = "abc";

DataSource = new ObservableCollection<Person>();
DataSource.Add(new Person { FirstName = "Alpha", LastName = "Apple" });
DataSource.Add(new Person { FirstName = "Beta", LastName = "Banana" });
DataSource.Add(new Person { FirstName = "Charlie", LastName = "Cucumber" });
}

public ICommand SetSelectedCommand => new RelayCommandBase(SetSelected);
private void SetSelected(object parameter = null)
{
SelectedPerson.FirstName = String1;
SelectedPerson = SelectedPerson; // force setter to run
DataSource = DataSource; // force ObservableCollection setter to run
}
}

最佳答案

Person类应该实现 INotifyPropertyChanged界面:

public class Person : INotifyPropertyChanged
{
private string _firstName;
public string FirstName
{
get { return _firstName; }
set
{
_firstName = value;
NotifyPropertyChanged();
}
}

private string _lastName;
public string LastName
{
get { return _lastName; }
set
{
_lastName = value;
NotifyPropertyChanged();
}
}

public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}

关于WPF DataGrid 在代码中更新其 ItemsSource 时不更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48344395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com