【发布时间】:2016-09-13 19:18:30
【问题描述】:
我正在尝试将 ViewModel 上的 ObservableCollection 绑定到视图上的 DataGrid:
public class RequestListViewModel : INotifyPropertyChanged
{
private ObservableCollection<Request> requests;
private Timer uTimer;
public RequestListViewModel()
{
requests = RequestAction.getRequestList();
SetRequestsUpdateTimer();
}
public ObservableCollection<Request> Requests
{
get { return requests; }
set { requests = value; OnPropertyChanged("Requests"); }
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
此 ObservableCollection 已使用计时器进行更新,并且工作正常。数据已更新。问题是更新没有反映在视图端:
<DataGrid Name="lstRequests" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="None" MouseDoubleClick ="myDataGrid_MouseDoubleClick"
>
<DataGrid.Columns>
...
</DataGrid.Columns>
然后我像这样创建绑定:
public RequestListView()
{
InitializeComponent();
model = new RequestListViewModel();
//this.DataContext = model;
lstRequests.ItemsSource = model.Requests;
Binding myBinding = new Binding();
myBinding.Source = model;
myBinding.Path = new PropertyPath("Requests");
myBinding.Mode = BindingMode.TwoWay;
myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
lstRequests.SetBinding(DataGrid.ItemsSourceProperty, myBinding);
}
我在这里错过了什么?
【问题讨论】:
-
为什么不在 XAML 中绑定?
-
我试过了,但我也应该在那里遗漏更多的东西,因为当我这样做时,我没有得到任何数据。 XAML 等效项是什么?
-
好吧,你不能那么容易地设置
Source,但通常你不会那样做,而是使用隐含的DataContext。 -
我是怎么做到的?抱歉,我是 WPF 的新手
标签: c# wpf data-binding datagrid observablecollection