C# 在选择另一行之前,不会更新ViewModel
我有一个WPF数据网格,如下所示:C# 在选择另一行之前,不会更新ViewModel,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一个WPF数据网格,如下所示: <DataGrid ItemsSource="{Binding Items}" SelectionUnit="CellOrRowHeader"> </DataGrid> public partial class MainWindow : Window { public ObservableCollection<Item> Items { get; set; } public MainWind
<DataGrid
ItemsSource="{Binding Items}"
SelectionUnit="CellOrRowHeader">
</DataGrid>
public partial class MainWindow : Window
{
public ObservableCollection<Item> Items { get; set; }
public MainWindow()
{
InitializeComponent();
Items = new ObservableCollection<Item>
{
new Item()
};
this.DataContext = this;
}
}
public class Item
{
private string _foo = string.Empty;
public string Foo
{
get { return _foo; }
set { _foo = value; }
}
private string _bar = string.Empty;
public string Bar
{
get { return _bar; }
set { _bar = value; }
}
}
它是这样绑定的:
<DataGrid
ItemsSource="{Binding Items}"
SelectionUnit="CellOrRowHeader">
</DataGrid>
public partial class MainWindow : Window
{
public ObservableCollection<Item> Items { get; set; }
public MainWindow()
{
InitializeComponent();
Items = new ObservableCollection<Item>
{
new Item()
};
this.DataContext = this;
}
}
public class Item
{
private string _foo = string.Empty;
public string Foo
{
get { return _foo; }
set { _foo = value; }
}
private string _bar = string.Empty;
public string Bar
{
get { return _bar; }
set { _bar = value; }
}
}
公共部分类主窗口:窗口
{
公共ObservableCollection项{get;set;}
公共主窗口()
{
初始化组件();
Items=新的ObservableCollection
{
新项目()
};
this.DataContext=this;
}
}
公共类项目
{
私有字符串_foo=string.Empty;
公共字符串Foo
{
获取{return\u foo;}
设置{u foo=value;}
}
私有字符串_bar=string.Empty;
公共字符串栏
{
获取{return\u bar;}
设置{u bar=value;}
}
}
该计划提出了一个项目。如果我在网格上更改Foo和Bar,它不会绑定更改,即使我在同一行的单元格之间切换。但是,如果我单击下一行,所有更改都会立即绑定。我猜这与默认的UpdateSourceTrigger设置为LostFocus有关。但是,我希望它在单元格失去焦点时绑定,而不是在行中绑定,因为我已经为单元格选择配置了网格。我如何才能做到这一点?我不知道除了在
自动生成列
事件上更改绑定之外,还有其他方法可以更改自动生成列的更新资源记录器
<DataGrid ItemsSource="{Binding Items}" SelectionUnit="CellOrRowHeader" AutoGeneratingColumn="myDataGrid_AutoGeneratingColumn"/>
wpf datagrid具有事务语义,与其他wpf控件不同。事务范围是整行。因此,在“事务”完成之前,不会应用更改。使用IEditableObjects这将不起作用。数据网格列使用强制将更新源触发器强制为显式,即使您尝试自己在回答中这样做!当我测试它时,它起作用了,否则我不会将此作为答案发布。另外,对于手动列,我可以将
UpdateSourceTrigger
设置为我喜欢的,并且它可以工作,并且默认UpdateSourceTrigger
不是Explicit
,而是default
Ok,只要您已经证明不是这样,但您应该告诉msdn文档是错误的。我不认为我证明了msdn文档是错误的。到目前为止,我还没有发现任何关于强制显式值的内容Binding.UpdateSourceTrigger
设置为Default
,这意味着它从DependedEncyProperty
元数据(FrameworkPropertyMetadata.DefaultUpdateSourceTrigger
)获取值。如果您将其设置为其他值,它将使用该值。