XAML x:绑定所选值不会绑定到可为空的整数



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的结构,则转换不会自动生成。

int绑定目标的g.cs文件:

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文件在可为null的结构上的样子:

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应用程序SDK的问题。

不管怎样,我在Microsoft UI XAML git中创建了一个错误:第6558期

x:Bind当前未正确处理null值。正如在2020年的GitHub上所说;将考虑修复这篇文章WinUI 3.0";。

最新更新