1

在我的 MainWindow 中,我有 DataGrid 和 StackPanel 以及一组 TextBox 控件(每列一个)和保存按钮。

当用户在 DataGrid 中选择一行时,当前行的详细信息将显示在文本框中。用户可以编辑文本框中的信息并保存(在保存过程中,源将被更新。使用 UpdateSourceTrigger=Explicit)

问题是,当在 DataGrid 中选择另一行时,源会更新。但我只想在点击保存按钮时更新。

示例代码:

主窗口.xaml

<Window x:Class="PrismTestProject.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:PrismTestProject"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <local:Model x:Key="model"/>
    </Window.Resources>
    <DockPanel DataContext="{StaticResource model}">
        <DataGrid ItemsSource="{Binding Table, UpdateSourceTrigger=Explicit}" DockPanel.Dock="Left" IsSynchronizedWithCurrentItem="True"/>
        <StackPanel DockPanel.Dock="Right">
            <WrapPanel>
                <Label Content="Name"  Width="100"/>  <TextBox Name="tbxName"  Text="{Binding Table/Name, UpdateSourceTrigger=Explicit}" Width="100"/>
            </WrapPanel>
            <WrapPanel>
                <Label Content="Age"  Width="100"/>
                <TextBox Name="tbxAge" Text="{Binding Table/Age,UpdateSourceTrigger=Explicit}" Width="100"/>
            </WrapPanel>
            <WrapPanel>
                <Label Content="Qualification"  Width="100"/>
                <TextBox Name="tbxQualification" Text="{Binding Table/Qualification,UpdateSourceTrigger=Explicit}" Width="100"/>
            </WrapPanel>
            <Button Click="SaveButton_Click" Content="Save"/>
        </StackPanel>
     </DockPanel>
</Window>

主窗口.xaml.cs

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void SaveButton_Click(object sender, RoutedEventArgs e)
    {
        tbxName.GetBindingExpression(TextBox.TextProperty).UpdateSource();
        tbxAge.GetBindingExpression(TextBox.TextProperty).UpdateSource();
        tbxQualification.GetBindingExpression(TextBox.TextProperty).UpdateSource();
    }
}

模型.cs

public class Model
{
    public DataTable Table { get; set; }
    public Model()
    {
        this.Table = new DataTable("Sample");
        this.Table.Columns.Add("Name");
        this.Table.Columns.Add("Age");
        this.Table.Columns.Add("Qualification");

        this.Table.Rows.Add("User 1", "55", "PG");
        this.Table.Rows.Add("User 1", "40", "UG");
        this.Table.Rows.Add("User 1", "35", "UG");
        this.Table.Rows.Add("User 1", "60", "PG");
    }
}
4

1 回答 1

0

我将为 DataGrid 的 SelectedItem 创建一个绑定。

然后在您的 SelectedItem 属性的 Setter 中,将它的克隆创建为新属性。

将信息面板的元素绑定到克隆对象,因此它们的所有更改都不会影响原始行。

在保存命令上,将克隆对象上更改的属性复制回所选对象。

于 2016-04-01T11:09:12.860 回答