C# CommunityToolkit.Mvvm ObservableProperty 列表

Enk*_*nki 2 c# wpf xaml mvvm

我想尝试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>
Run Code Online (Sandbox Code Playgroud)

这是我的视图模型:

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

    [RelayCommand]
    private void ClickButtonListDirectory()
    {
        this.DirectoriesNames.Add("Hello");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

有人可以帮我解决这个问题吗?

谢谢。

And*_*ing 8

将您的更改ListObservableCollection.

这段代码:

[ObservableProperty]
List<string> _directoriesNames = new();
Run Code Online (Sandbox Code Playgroud)

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

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