XAML 如何在打开的对话框中执行保存命令时更新index.view

xwbd5t1u  于 2022-12-16  发布在  其他
关注(0)|答案(1)|浏览(112)

当在打开的对话框中执行保存命令时,父index.view不会更新。对于SaveAndClose命令,一切正常。在https://github.com/alex-kukhtin/A2v10.Web.Sample.git上对Product对象进行了测试。平台A2v10,不幸的是我还不能标记。

<Dialog xmlns="clr-namespace:A2v10.Xaml;assembly=A2v10.Xaml" 
        Title="{Bind Product.Id, Format='@[Product] [{0}]'}">
    <Dialog.Buttons>
        <Button Content="@[SaveAndClose]" Command="{BindCmd SaveAndClose, ValidRequired=True}"/>
        <Button Content="@[Save]" Command="{BindCmd Save, ValidRequired=True}"/>
        <Button Content="@[Cancel]" Command="{BindCmd Close}"/>
    </Dialog.Buttons>
    <TabPanel>
        <Tab Header="@[General]">
            <Grid>
                <TextBox Label="@[Name]" Value="{Bind Product.Name}"/>
                <TextBox Label="@[BarCode]" Value="{Bind Product.BarCode}" Width="20rem"/>
                <TextBox Label="@[Article]" Value="{Bind Product.Article}" Width="20rem"/>
                <TextBox Label="@[Memo]" Value="{Bind Product.Memo}" Multiline="True" Rows="3"/>
            </Grid>
        </Tab>
        <Tab Header="@[Images]" Padding="1rem">
            <Image Source="{Bind Product.Picture}" Limit="100"
                Base="/catalog/product" Height="18rem"/>
        </Tab>
    </TabPanel>
</Dialog>

PS:由编辑命令调用

I try: executing the Save command in an open dialog
I expecting: The parent index.view is update
4urapxun

4urapxun1#

此行为是故意的。
更新取决于对话框的调用方式。
如果调用了Edit命令,则索引会在对话框返回SaveAndClose命令后更新编辑元素。

保存命令不关闭对话框,因此调用代码不进行控制。

解决此问题的最简单方法是使用事件。
指定在保存元素时,要引发事件并在索引中捕获该事件。
比如这样一个例子:

<Dialog SaveEvent="app.element.saved">

索引.模板.ts

const template: Template = {
    events: {
        'app.element.saved': elementSaved
    }
};

export default template;

function elementSaved(elem) {
   const ctrl: IController = this.$ctrl;
   // Find the element in the list and update if found or add if not.
   let found = this.Items.find(x => x.Id === elem.Id);
   if (found)
      found.$merge(elem);
   else
      this.Items.$append(elem); 
}

最后但并非最不重要的一点。如果你使用事件,用Show命令调用对话框,而不是用Edit命令。这将避免不必要的更新。

相关问题