我想试试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
)中。
有人能帮我吗?
- 谢谢-谢谢
2条答案
按热度按时间zvms9eto1#
将您的
List
更改为ObservableCollection
。此代码:
当DirectoriesNames本身发生更改,但您对DirectoriesNames所做的唯一更改是示例化它时,将通知UI。
您可以使用ObservableCollection在您添加或删除项时通知UI。
shyt4zoc2#
您需要使用ObservableCollection:-
ObservableCollection<string> DirectoriesNames = new();