gpt4 book ai didi

c# - 将 DataTable 绑定(bind)到 DataGrid C# WPF MVVM

转载 作者:太空宇宙 更新时间:2023-11-03 21:02:26 31 4
gpt4 key购买 nike

MVVM 的新手,在尝试将动态生成的 DataTable 与 DataGrid 绑定(bind)时努力弄清楚哪里出了问题。我找到了一些解决方案,并尝试根据之前的回复对我的实现进行调整:

XAML:

<DataGrid x:Name="Grid" Margin="5,0,0,0" ItemsSource="{Binding dataTable, Mode=TwoWay}" AutoGenerateColumns="False" VerticalAlignment="Center">
<DataGrid.Columns>
<DataGridTextColumn Header="Header1" Binding="{Binding Column1Name}"/>
<DataGridTextColumn Header="Header2" Binding="{Binding Column2Name}"/>
</DataGrid.Columns>
<DataGrid.DataContext>
<ViewModels:Presenter/>
</DataGrid.DataContext>

XAML CS:

DataTable dataTable = new DataTable();
Grid.DataContext = dataTable.DefaultView;
//I don't believe I should be using System.Data in View?

View 模型

.演示者:

public class Presenter : ObservableObject {
private DataTable _dataTable;


public DataTable dataTable
{
get { return _dataTable; }
set
{
_dataTable = value;
RaisePropertyChangedEvent("Grid");
}
}

private void ParseData()
{
if (string.IsNullOrWhiteSpace(ID)) return;
dataTable = DataParser.ParseURL(ID);
}
}

.ObservableObject

public class ObservableObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

protected void RaisePropertyChangedEvent(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}

我知道模型中的数据正在正确返回,当我在调试器中时,RaisePropertyChangedEvent 正在触发,但 View 没有更新。

最佳答案

您提出了错误的 PropertyName(这似乎是您在 XAML 中的 Grid 的名称。

在调用您的 RaisePropertyChanged 方法时提升名称 "dataTable"

像这样:

public DataTable dataTable
{
get { return _dataTable; }
set
{
_dataTable = value;
RaisePropertyChangedEvent("dataTable");
}
}

您可以做的其他一些事情是:

  • propertyName 参数之前使用 [CallerMemberName] 属性。这将使您不必提供它,因为它会检测调用它的属性(C#5 及更高版本)- 例如:protected void RaisePropertyChangedEvent([CallerMemberName] string propertyName)
  • RaisePropertyChanged 方法中使用 PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));。这使您不必创建变量并检查 null(C#6 及更高版本)
  • 将您的 dataTable 属性重命名为 DataTable - 它可以更清楚地说明什么是属性和什么是字段,这在 C# 中很常见

希望这有帮助:)

关于c# - 将 DataTable 绑定(bind)到 DataGrid C# WPF MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44090708/

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