命令参数 Avalonia

Command Parameter Avalonia

提问人:solodeving 提问时间:11/15/2023 更新时间:11/15/2023 访问量:25

问:

在我的登录视图中,我有一个“没有帐户”按钮,按下该按钮时会打开一个对话框。 该对话框包含“寄存器”视图。

<dialogHostAvalonia:DialogHost Identifier="NoAccountDialogHost"
                               Grid.ColumnSpan="2"
                               Grid.RowSpan="5"
                             >             
    <dialogHostAvalonia:DialogHost.DataTemplates>
        <DataTemplate DataType="viewmodels:RegisterVM">
            <views:RegisterView />
        </DataTemplate>
    </dialogHostAvalonia:DialogHost.DataTemplates>
</dialogHostAvalonia:DialogHost>

对话框打开就好了。

寄存器视图有 3 个文本框,这些文本框与寄存器视图模型中的 3 个属性绑定,这些属性工作正常,还有一个“注册”按钮。按下此按钮时,应将用户添加到数据库中,然后关闭对话框。命令的样子如下:

  private void AddAccountToDB(DialogHost dialog)
 {
     //add
     using (var context = new DatabaseContext())
     {
         var user = new User(Utilities.GenerateUserId() , Username!, Password! , Email!);
         context.Credentials.Add(user);
         context.SaveChanges();
     }
     //close dialog
     dialog.CurrentSession!.Close();

 }

如您所见,从我发送的按钮中,作为参数,DialogHost 实例。所以我这样做了:

CommandParameter="{RelativeSource AncestorType={x:Type 
dialogHostAvalonia:DialogHost},Mode=FindAncestor}"

当我单击“注册”时,Program.cs 中会引发错误:Error这显然来自命令参数。我一定是做错了什么。任何帮助将不胜感激!

C# XAML 阿瓦洛尼亚

评论


答:

0赞 Tarazed 11/15/2023 #1

您提供的是 RelativeSource 作为参数。您忘记包含绑定,以便它解析相对源。

CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type 
dialogHostAvalonia:DialogHost},Mode=FindAncestor}}"