【发布时间】:2019-12-22 02:44:42
【问题描述】:
无法弄清楚为什么我的 DataGrid 在填充绑定的 DataTable 时没有填充。我检查了其他 Stackoverflow 帖子,但似乎没有任何问题可以解决我的问题。我知道我的 DataTable 被填满了,因为行数超过 50。填充 DataTable (ReturnOperators) 的方法被成功调用(它是在更改列表框中的 SelectedItem 时)
这是我的代码:
Xaml:
<DataGrid x:Name="dgOperators"
ItemsSource="{Binding DtOperators}"
AutoGenerateColumns="True"
Background="#0d0d0d"
Foreground="White"
Margin="10"
Grid.Row="1"
IsReadOnly="True" />
MainWindow.xaml.cs:
私有 ViewModel 虚拟机;
public MainWindow()
{
InitializeComponent();
vm = new ViewModel();
this.DataContext = vm;
}
视图模型:
private DataTable dtOperators;
public DataTable DtOperators
{
get { return dtOperators; }
set
{
dtOperators = value;
OnPropertyChanged("DtOperators");
}
}
public void ReturnOperators()
{
string query = "My SQL Query Here";
using (SqlConnection con = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand(query, con))
using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
{
DtOperators.Clear();
adapter.Fill(DtOperators);
}
}
【问题讨论】:
-
您的 ViewModel 是否从接口 (INotifyPropertyChanged) 继承并覆盖 PropertyChangedEventHandler?从您提供的 ViewModel 代码中我无法完全判断,您的 OnPropertyChanged 事件是否成功触发?
-
是的。 ViewModel 从实现 INotifyPropertyChanged 的 ViewModelBase 继承。它正在处理我的 ViewModel 中的其他属性。
-
@JEllery 我已经设法让它工作(部分)。 adapter.Fill() 出于某种原因没有设置 DtOperators。我填写了一个辅助 DataTable 'dt',然后有 DtOperators = dt 并且它可以工作。不知道为什么我必须这样做......
-
DtOperators 在您尝试填充它时可能仍然为空。在您的 ViewModel 构造函数中实例化 DataTable(即 DtOperators = new DataTable();)
-
adapter.Fill(DtOperators);确实显然没有为DtOperators属性分配新值。因此当然不会调用属性设置器和OnPropertyChanged("DtOperators")。
标签: c# wpf visual-studio mvvm datagrid