如何在运行时更改WPF控件绑定

时间:2017-07-25 14:03:27

标签: c# wpf mvvm data-binding controls

我的表单允许我添加和编辑记录(在不同时间)。

目前我有一个Save按钮,用于提交对数据库的更改:

<Page.DataContext>
    <ViewModels:RecordsViewModel />
</Page.DataContext>

<Grid>
    <Button Name="btnSave" Content="Save" Comand="{Binding AddRecordCommand}" />
</Grid>

当我在DataGrid中单击以编辑记录时,记录数据将从数据库中提取并加载到每个分配的绑定的表单字段中。

不幸的是,这不会改变我的保存按钮上的绑定,所以我试图在我的代码中执行此操作:

// DataGrid edit button was clicked
private void btnEdit_Click(object sender, RoutedEventArgs e)
{
    btnSave.SetBinding(Button.CommandProperty, new Binding
    {
        Source = this.DataContext,
        Path = new PropertyPath("UpdateRecordCommand")
    });
    btnSave.CommandParameter = new Binding("Id");

    gList.Visibility = Visibility.Collapsed;
    gAddEdit.Visibility = Visibility.Visible;
}

遗憾的是,这不起作用,绑定保持不变,以便将新记录保存到数据库中。

如何更改按钮的绑定,以便更新记录而不是添加新记录?

1 个答案:

答案 0 :(得分:0)

如果您只是检查Id!=0

private void btnEdit_Click(object sender, RoutedEventArgs e)
{
    if (Id != 0)
    {
        // do your update code - do not touch the binding
        // Also this should call code from another class, 
        // it's better to separate out concerns within a project.
    }
    else
    {
        // do what you when there is an error - display a message to
        // the user. Load a specific page, reload this page.
    }

}

管理用户在添加或更新记录之间切换的更好方法是将这两个功能分开。这完全是关于您的程序流和UI。分离创建或编辑功能要好得多。

如果您需要检查Id是否存在而不存在 - 您可以加载创建页面。