XAML C#社区工具包. mvvm列表上的可观察属性

dvtswwa3  于 2022-12-07  发布在  C#
关注(0)|答案(2)|浏览(213)

我想试试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)中。
有人能帮我吗?

  • 谢谢-谢谢
zvms9eto

zvms9eto1#

将您的List更改为ObservableCollection
此代码:

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

DirectoriesNames本身发生更改,但您对DirectoriesNames所做的唯一更改是示例化它时,将通知UI。
您可以使用ObservableCollection在您添加删除项时通知UI。

shyt4zoc

shyt4zoc2#

您需要使用ObservableCollection:-
ObservableCollection<string> DirectoriesNames = new();

相关问题