我想尝试 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
)。
有人可以帮我吗?
谢谢。
将您的
List
更改为 ObservableCollection
。
此代码:
[ObservableProperty]
List<string> _directoriesNames = new();
当 DirectoriesNames 本身发生更改时,将通知 UI,但您对 DirectoriesNames 所做的唯一更改是实例化它。
当您添加或删除项目时,您可以使用ObservableCollection通知UI。
您需要使用ObservableCollection:-
ObservableCollection<string> DirectoriesNames = new();