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”。
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”。