Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在选择另一行之前,不会更新ViewModel_C#_Wpf_Datagrid - Fatal编程技术网

C# 在选择另一行之前,不会更新ViewModel

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

我有一个WPF数据网格,如下所示:

<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
)获取值。如果您将其设置为其他值,它将使用该值。