0

我使用 Microsoft.Toolkit.Mvvm 库作为 MVVM 库。我的 C# 代码如下:

class SampleViewModel : ObservableObject
{ 
    private List<int> _sampleList;
    public List<int> sampleList
    {
        get => _sampleList;
        set
        {
            SetProperty(ref _sampleList, value);
        }
    }
}

我试图用来显示所有值的 XAML 代码List<int>是:

<ListView x:Name="mylistview" ItemsSource="{x:Bind ViewModel.sampleList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition/>
                    <RowDefinition/>
                </Grid.RowDefinitions>
                <ItemsControl ItemsSource="{Binding}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate x:DataType="x:Int32">
                            <TextBlock Text="{x:Bind}" />
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

更新列表时,会创建元素,但不显示 int 的值,只存在一个空行。如果我使用以下内容,我可以显示该值:

<TextBlock Text="{x:Bind ViewModel.sampleList[0], Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

我应该如何更改 ListView,以便它也显示值?

4

2 回答 2

1

我认为你想要做的事情过于复杂

<ListView x:Name="mylistview" ItemsSource="{x:Bind ViewModel.sampleList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
    <ListView.ItemTemplate>
        <DataTemplate x:DataType="x:Int32">
            <TextBlock Text="{x:Bind}" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

应该做的伎俩

这读作为 sampleList 中的每个项目创建一个文本框,如果这不起作用,那么问题很可能是您的 datacontext 尚未设置并且绑定无法跟踪相对地址

你也应该尝试使用Observable 集合

IE

public ObservableCollection<int> sampleList { get ;} = new ObservableCollection<int>();

这是因为您应该更改列表的内容而不是列表本身,因此您需要 INotifyCollectionChanged 事件来通知绑定内容已更改

于 2021-06-03T10:27:32.053 回答
1
  1. 尝试使用ObservableCollection<int>而不是List<int>
  2. 您在 XAML 中的绑定非常复杂。尝试以下操作:
    <ListView x:Name="mylistview" ItemsSource="{x:Bind ViewModel.sampleList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Label Content="{x:Bind}" />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
于 2021-06-03T10:32:54.420 回答