C# CommunityToolkit.Mvvm ObservableProperty 在列表中

问题描述 投票:0回答:2

我想尝试 Community Toolkit 8.0 MVVM 部分。

我有一个非常简单的应用程序:

.... 
       d:DataContext="{d:DesignInstance Type=local:MainWindowViewModel}"
.... 
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="12*" />
        </Grid.RowDefinitions>
        <Button x:Name="ButtonDirectory" Grid.Row="0" Grid.Column="0" Margin="50 2 0 2" Width="200" Content="List Directory" Command="{Binding ClickButtonListDirectoryCommand, Mode=OneWay}" />
        <ListView x:Name="ListViewDirectories" Grid.Row="1" Grid.Column="0" ItemsSource="{Binding DirectoriesNames}"  />
    </Grid>

这是我的视图模型:

public partial class MainWindowViewModel : ObservableObject
{
    [ObservableProperty]
    List<string> _directoriesNames = new();

    [RelayCommand]
    private void ClickButtonListDirectory()
    {
        this.DirectoriesNames.Add("Hello");
    }
}

当我使用

string
而不是列表时,此构造有效 - 但显然,当我的视图组件是 ListView 时,我想使用类似列表的东西。

directoriesNames
本身已更新(在调试器中看到),但它没有显示在视图中(
ListView
)。

有人可以帮我吗?

谢谢。

c# wpf xaml mvvm winui
2个回答
10
投票

将您的

List
更改为
ObservableCollection

此代码:

[ObservableProperty]
List<string> _directoriesNames = new();

DirectoriesNames 本身发生更改时,将通知 UI,但您对 DirectoriesNames 所做的唯一更改是实例化它。

当您添加删除项目时,您可以使用ObservableCollection通知UI。


4
投票

您需要使用ObservableCollection:-

ObservableCollection<string> DirectoriesNames = new();

© www.soinside.com 2019 - 2024. All rights reserved.