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 は監視可能なコレクションから正しく更新されます。
これが機能しない理由と、このコマンドから新しいウィンドウを生成する正しい方法について、誰かが私にガイダンスを与えることができますか? これは、プリズムからの状態ベースのビュー ナビゲーションで行う必要がありますか? 私たちはすでにこれをモジュール化と指揮のために使用しています。
アドバイスをありがとう。