C# 为什么wpf UpdateSourceTrigger没有显式绑定?

C# 为什么wpf UpdateSourceTrigger没有显式绑定?,c#,wpf,xaml,datagrid,updatesourcetrigger,C#,Wpf,Xaml,Datagrid,Updatesourcetrigger,我在DataGrid和对象之间有双向绑定。我只想在用户单击保存按钮时将DataGrid中所做的更改保存到对象。作为第一步,我设置UpdateSourceTrigger=Explicit。当我将该属性设置为explicit(因为我还没有调用UpdateSource())时,我本以为不会发生绑定,但与我的预期相反,当我关闭并重新启动程序时,更改会绑定到该对象 为什么我的更改仍然绑定到对象的设置 以下是我的xaml文件中的相关DataGrid代码: <DataGrid x:Name="DataG

我在DataGrid和对象之间有双向绑定。我只想在用户单击保存按钮时将DataGrid中所做的更改保存到对象。作为第一步,我设置UpdateSourceTrigger=Explicit。当我将该属性设置为explicit(因为我还没有调用UpdateSource())时,我本以为不会发生绑定,但与我的预期相反,当我关闭并重新启动程序时,更改会绑定到该对象

为什么我的更改仍然绑定到对象的设置

以下是我的xaml文件中的相关DataGrid代码:

<DataGrid x:Name="DataGrid1" IsReadOnly="False"
                 AutoGenerateColumns="False" CanUserAddRows="False" SelectionUnit="Cell"
                  ItemsSource="{Binding data}">
            <DataGrid.DataContext>
                <Binding Source="{StaticResource myData}" UpdateSourceTrigger="Explicit"/>
            </DataGrid.DataContext>

            <DataGrid.Columns>
                <DataGridTextColumn Header="Field" Binding="{Binding Path=name, Mode=TwoWay, 
                        UpdateSourceTrigger=Explicit}" Width="Auto"/>
                <DataGridTextColumn Header="Length of Field" Binding="{Binding Path=length, Mode=TwoWay, 
                        UpdateSourceTrigger=Explicit}" Width="Auto"/>
            </DataGrid.Columns>
</DataGrid>

尝试使用DataGridTemplateColumn而不是TextColumn:

<Window x:Class="DataGridUpdateSourceTriggerOneWay.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:DataGridUpdateSourceTriggerOneWay"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <DataGrid x:Name="DataGrid1" 
              IsReadOnly="False"
              AutoGenerateColumns="False"
              CanUserAddRows="False"
              SelectionUnit="Cell"
              ItemsSource="{Binding data}">

        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Field">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox Text="{Binding Path=Name, Mode=TwoWay, 
                    UpdateSourceTrigger=Explicit}" Width="Auto"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Length of Field">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox Text="{Binding Path=Length, Mode=TwoWay, 
                    UpdateSourceTrigger=Explicit}" Width="Auto"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>
和我的测试代码:

public partial class MainWindow : Window
{
    public ObservableCollection<Data> data { get; set; }

    public MainWindow()
    {
        InitializeComponent();
        data = new ObservableCollection<Data>();
        data.Add(new Data() { Name = "Data1", Length = 1 });
        data.Add(new Data() { Name = "Data2", Length = 2 });
        this.DataContext = this;
    }
}
公共部分类主窗口:窗口
{
公共可观测收集数据{get;set;}
公共主窗口()
{
初始化组件();
数据=新的ObservableCollection();
Add(newdata(){Name=“Data1”,Length=1});
Add(newdata(){Name=“Data2”,Length=2});
this.DataContext=this;
}
}

它将仅在开始时访问PropertyChanged事件,之后,当从GUI修改值时,它将不会触发。因此,最后,您将能够从代码隐藏中保存您的修改

你能给出一个最低限度的(非)工作示例吗?什么是数据对象?您正在使用依赖项属性吗?您正在使用视图模型吗?将格式从DataGridTextColumn更改为DataGridTemplateColumn现在可以显式绑定(:知道DataGridTextColumn不工作的原因吗?
public partial class MainWindow : Window
{
    public ObservableCollection<Data> data { get; set; }

    public MainWindow()
    {
        InitializeComponent();
        data = new ObservableCollection<Data>();
        data.Add(new Data() { Name = "Data1", Length = 1 });
        data.Add(new Data() { Name = "Data2", Length = 2 });
        this.DataContext = this;
    }
}