gpt4 book ai didi

c# - UI 不从单独 ViewModel 的命令调用的 ObservableCollection 更新

转载 作者:行者123 更新时间:2023-11-30 21:02:56 25 4
gpt4 key购买 nike

private ObservableCollection<ProjectItem> _projectItems;

public ObservableCollection<ProjectItem> DataItems
{
get { return _projectItems; }
}

public ProjectsPanelViewViewModel()
{
_projectItems = new ObservableCollection<ProjectItem>();
_createProjectCommand = new DelegateCommand(OnCreateProjectCommand);
_saveProjectCommand = new DelegateCommand(OnSaveProjectCommand);
}

private void OnCreateProjectCommand()
{
_addProjectViewModel = new AddProjectViewModel();
AddProjectView view = new AddProjectView();
view.Show();
}

private void OnSaveProjectCommand()
{
ProjectItemViewModel _vm = new ProjectItemViewModel();
_vm.ProjectName = ProjectName;
_vm.ProjectDescription = ProjectDescription;
var item = new ProjectItem(_vm);
_projectItems.Add(item);
}

XAML

<UserControl.DataContext>
<VM:ProjectsPanelViewViewModel/>
</UserControl.DataContext>
<StackPanel Name="ProjectsPanel" Style="{DynamicResource FullLengthPanelStyle}" >
<StackPanel Name="ProjectsHeader" Orientation="Horizontal" Margin="0,0,0,5">
<Label Style="{StaticResource TitleLabelStyleBlue}">projects</Label>
<Button Name="AddProjects" Margin="10,5,0,0" Style="{StaticResource CircularGreyButtonStyle}" Content="+" ToolTip="Add a new project" Command="{Binding CreateProjectCommand}"/>
<Button Name="ExpandProjects" Margin="10,5,0,0" Style="{StaticResource CircularGreyButtonStyle}" Content=">" ToolTip="Expand projects"/>
</StackPanel>

<ScrollViewer VerticalScrollBarVisibility="Visible">
<ItemsControl ItemsSource="{Binding DataItems}"/>
</ScrollViewer>
</StackPanel>

当 OnCreateProjectCommand 打开时,它会创建一个包含 2 个字符串字段的窗口,然后会有一个执行 OnSaveProjectCommand 的按钮。命令执行得很好,但是 UI 没有发现新项目已添加到集合中。 (调试时它在那里)。但是,如果您更改 OnSaveProjectCommand 中的代码并将其放入 OnCreateProjectCommand,并对简单字符串值进行硬编码,则 UI 会根据可观察集合正确更新。

谁能给我一些指导,说明为什么这不起作用,以及我应该从此命令生成新窗口的正确方法。这应该通过 Prism 的基于状态的 View 导航来完成吗?我们已经将其用于模块化和命令化。

感谢您的建议。

最佳答案

我认为您可能在那里遇到引用问题。您如何将这些 ViewModel 彼此粘合在一起?我不熟悉 Prism,但您在屏幕上查看的 VM 实例可能与您正在调试的实例不同。否则就没有意义。 Observablecollections 通常工作得很好,除非您从 UI 线程以外的不同线程操作它们。尝试使用 Snoop监视正在运行的应用程序以查看您的 DataContext 是什么。

关于c# - UI 不从单独 ViewModel 的命令调用的 ObservableCollection 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13144348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com