[英]C# CommunityToolkit.Mvvm ObservableProperty on a list
I want to try the Community Toolkit 8.0 the MVVM part.我想试试Community Toolkit 8.0的 MVVM 部分。
I have a very simple application:我有一个非常简单的应用程序:
....
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>
and this is my viewmodel:这是我的视图模型:
public partial class MainWindowViewModel : ObservableObject
{
[ObservableProperty]
List<string> _directoriesNames = new();
[RelayCommand]
private void ClickButtonListDirectory()
{
this.DirectoriesNames.Add("Hello");
}
}
This construct works, when I use string
instead of a list - but obviously I want to use something like a list when my view component is a ListView.当我使用
string
而不是列表时,此构造有效 - 但显然,当我的视图组件是 ListView 时,我想使用类似列表的东西。
The directoriesNames
itself gets updated (saw that in the debugger) but it's not displayed in the view ( ListView
). directoriesNames
本身已更新(在调试器中看到),但未显示在视图中( ListView
)。
Can someone help me out with that?有人可以帮我解决这个问题吗?
Thanks.谢谢。
You need to use ObservableCollection :-您需要使用ObservableCollection :-
ObservableCollection<string> DirectoriesNames = new();
Change your List
to ObservableCollection
.将您的
List
更改为ObservableCollection
。
This code:这段代码:
[ObservableProperty]
List<string> _directoriesNames = new();
Will notify the UI when the DirectoriesNames itself is changed but the only change you are making to DirectoriesNames is instantiating it.当DirectoriesNames本身发生更改时将通知 UI,但您对DirectoriesNames所做的唯一更改是对其进行实例化。
You can use a ObservableCollection to notify the UI when you add or remove items.您可以使用ObservableCollection在添加或删除项目时通知 UI。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.