所以我用TextBoxes / ListBoxes设置了几乎相同的东西,依此类推,但它似乎不适用于dataGrid ..
所以我有一个包含dataGrid的视图索引。
我创建了一个IndexModel类,如下所示:
public class IndexModel : INotifyPropertyChanged
{
private ObservableCollection<Schedule> _schedules;
public IndexModel(ObservableCollection<Schedule> schedules)
{
_schedules = schedules;
}
public ObservableCollection<Schedule> Schedules
{
get { return _schedules; }
set
{
_schedules = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
然后在我的IndexView中创建IndexModel。
private ObservableCollection<Schedule> _schedules;
public Index(MainController controller)
{
_controller = controller;
InitializeComponent();
_schedules = controller.DatabaseController.GetSchedules() as ObservableCollection<Schedule>;
DataContext = new IndexModel(_schedules);
Log.Info($"UI Component {componentName} loaded succesfully",componentName, Source);
}
我创建了DataContext并将其绑定在XAML
中ItemsSource="{Binding Path=Schedules, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"
我甚至创造了一个简单的空白。
Schedule selectedItem = (Schedule) dataGrid.SelectedItem;
selectedItem.Name = "Testing";
它更新了ObservableCollection,但dataGrid没有更新......
我查看了stackoverflow的所有答案,但仍然无法解决我的问题..
public partial class Schedule
{
public int Id { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set; }
public DateTime DateFrom { get; set; }
public DateTime DateTo { get; set; }
public virtual User User { get; set; }
[StringLength(256)]
public string Comment { get; set; }
[StringLength(256)]
public string Description { get; set; }
[Required]
public Priorities Priority { get; set; }
public virtual UpdaterObject Object { get; set; }
public virtual ICollection<ScheduleAction> ScheduleAction { get; set; }
答案 0 :(得分:2)
根据您的示例,如果您在集合中动态添加或删除计划,那么应该起作用。
但是如果你想从UI更新给定的时间表,如:
selectedItem.Name = "Testing";
您想要的是更新Shedule项目本身,而不是更新Schedule。
换句话说,如果您希望在视图中编辑它,则需要一个viewModel作为Schedule。你还需要为Shedule提供一个数据模板,让WPF知道如何渲染Shedule。
希望它有所帮助。