XAML x:Bind 所选值不会绑定到可为空的 int

XAML x:Bind Selected Value won't bind to nullable int

XAML x:Bind 和尝试绑定到可为 null 的 int 时出现一些奇怪的行为:

绑定定义:

public ObservableCollection<ListObject> List { get; set; }

public class ListObject
   {
      public int? ID { get; set; }

      public string Name { get; set; }
   }

XAML

 <ListView ItemsSource="{x:Bind ViewModel.List}"
           DisplayMemberPath="Name"
           SelectedValuePath="ID"
           SelectedValue="{x:Bind ViewModel.SelectedID, Mode=TwoWay}"/>

以下工作没有问题:

private int _selectedID;

public int SelectedID
   {
      get { return _selectedID; }
      set { _selectedID = value; }
   }

这不起作用,给我一个无效的 int 对象?铸造异常:

private int? _selectedID;
    
public int? SelectedID
   {
      get { return _selectedID; }
      set { _selectedID = value; }
   }

为什么 XAML 绑定对常规 int 有效,而可为 null 的 int 会导致问题?

已更新

在进一步研究这个问题后,g.cs 文件似乎正确地转换了 int,但是如果绑定目标是一个可为 null 的结构,则不会自动生成转换。

g.cs int 绑定目标文件:

private void UpdateTwoWay_25_SelectedItem()
            {
                if (this.initialized)
                {
                    if (this.dataRoot != null)
                    {
                        if (this.dataRoot.ViewModel != null)
                        {
                            this.dataRoot.ViewModel.SelectedID = (global::System.Int32)this.obj25.SelectedItem;
                        }
                    }
                }
            }

g.cs 文件在可空结构中的样子:

private void UpdateTwoWay_25_SelectedItem()
            {
                if (this.initialized)
                {
                    if (this.dataRoot != null)
                    {
                        if (this.dataRoot.ViewModel != null)
                        {
                           // This line is the issue
                            this.dataRoot.ViewModel.SelectedID = this.obj25.SelectedItem;
                        }
                    }
                }
            }

手动更新 g.cs 文件使绑定工作正常。我不知道这是新 x:bind、WinUI 3 还是 Windows App SDK 的问题。

无论如何,我在 Microsoft-UI-XAML git 中创建了一个错误: Issue 6558

x:Bind 当前无法正确处理 null 值。正如 this GitHub issue from 2020 中所述,他们“将考虑修复此 post WinUI 3.0”。