我是新的WPF和MVVM模式。我正在尝试构建一个‘逐步’或‘向导’类似的应用程序。因此,用户应该首先登录,然后选择一些数据,最后选择的数据应该存储在某个地方。(这种流动永远不会改变!)但是,我决定对每个模板使用DataTemplates和不同的ViewModels,对于填充模板的窗口使用MainViewModel。(认为这应该适用于不同的职位)
但现在我的问题开始了。我知道如何从MainViewModel中更改当前视图,但我希望从内部ViewModel中更改当前视图。我希望能够从一个内部ViewModel收集数据到另一个内部,我不知道这是如何工作的。
MainViewModel:
public
我正在尝试使用MVVM让我的第一个WPF应用程序工作,我遇到了一个绑定问题。
设置是有一个视图& viewModel,它包含用户详细信息(父视图),为了保持简单,我将该视图的一部分放入单独的视图& viewModel (子视图)中。子视图定义为UserControl。
我面临的问题是如何设置子视图的DataContext ( UserControl)。我的父ViewModel有一个属性,它公开子ViewModel,如下所示:
class ParentViewModel: INotifyPropertyChanged
{
public ChildViewModel chi
我被迫在WPF应用程序中首先使用View First MVVM,并且我很难了解如何使它优雅地工作。
问题的根源在于嵌套的UserControls。在MVVM体系结构中,每个UserControl都需要将其视图模型分配给它的DataContext,这使绑定表达式保持简单,而且这也是WPF实例化通过DataTemplate生成的任何视图的方式。
但是,如果子UserControl具有父UserControl需要绑定到它自己的视图模型的依赖属性,那么子UserControl将其DataContext设置为自己的视图模型这一事实意味着父XAML文件中的“隐式路径”绑定将解析到其子视图模型而不是父视图模
我的程序是由一个TreeView和两个contentPresenters组成的。mainWindow、TreeView和每个contentPresenter都有自己的viewModels。
我想从mainWindowViewModel TreeViewViewModel**.**调用中的一个函数
我需要这样做,因为mainWindowViewModel控制contentPresenters中显示的内容,我想手动更新显示。
我猜我会做这样的事..。
TreeViewViewModel**:**
public class TreeViewViewModel
{
//Do I need t
目标是直接访问子ViewModel中的属性,而不丢失整个ViewModel结构的上下文。
目前,我在字典中有一个资源,该资源包含对ViewModel的引用,该引用用作整个应用程序的数据上下文。
因此,每个视图的数据文本如下所示:
DataContext="{StaticResource mainViewModel}"
在我的ViewModel中,我嵌套了如下所示的子ViewModels:
public class ParentViewModel {
public ChildVM ChildVM { get; set; }
public ParentVM(){
我通常在代码背后实例化我的ViewModel,并将其设置为窗口或UserControl的DataContext。
对于这个简单的ViewModel:
public class ViewModel
{
public ObservableCollection<string> items { get; set; }
public ViewModel()
{
items = new ObservableCollection<string>();
items.Add("FirstItem");
我有一个带有嵌套子视图的主视图。我有一个主VM,它保存子VM的实例。在某个时候,主VM需要与子VM交互。
在主VM中。我将子ViewModel定义为
public ChildViewModel VmChild
{
get
{
if (this.vmChild == null)
this.vmChild = new ChildViewModel();
return this.vmChild;
}
set
{
本质上,我有一个主窗口,其中有一个用户控件,其中包含一个与主窗口的视图模型绑定的属性。其思想是,当用户表单中的属性发生变化时,通过绑定,主窗口视图模型中的属性也会发生变化。问题在于,当用户控件没有ViewModel时,当我向用户控件添加一个简单的ViewModel时,绑定就不再起作用了。由于我需要一个ViewModel来控制我的控件,所以我需要弄清楚为什么添加ViewModel会破坏绑定,以及如何修复它。欢迎任何建议。
public partial class Control1 : UserControl, INotifyPropertyChanged
{
public Control1
更新2010 06 12
将精华素蒸馏成一个更小的样品溶液,在这里可以得到。
现在它似乎是一个与选项卡控件相关的问题:当数据上下文被重新应用时(单击按钮),似乎一切都像预期的那样工作。绑定刷新,但是活动选项卡上的所有绑定都会中断。
您可以通过选择任意选项卡并单击按钮来验证这一点,您将看到该选项卡上的控件“kaput”。添加了一组日志语句,这就是我的朋友是如何在选项卡控件上完成这个概要和他的修复设置DataContext="{Binding}“的。
但我们还是不知道为什么这样做.
TabControl Data Context now set to ReproTabItemBug.Mai
有时,在开发WPF应用程序时,我需要从相应的Window (View)中访问某个特定的ViewModel,以执行或触发这样的方法--例如:
//In the MainWindowViewModel
MainWindowView.Hide();
但是这并不容易,甚至违反了MVVM,因为ViewModel不应该知道任何关于视图的信息,所以我开始这样做:
//In the MainWindowViewModel
Application.Current.MainWindow.Hide();
这在处理其他Windows (视图)时变得不切实际:
//In the AnotherWindowView
A
我有一个MVVM应用程序,在应用程序中的某个地方,我们公司使用了不能使用{Binding}的第三方。它是一个绘制形状等的组件,当ViewModel从持久化存储中加载所有形状来通知视图绘制它们时,我需要它。在一个完美的世界里,我会让第三方把它绑定到ViewModel Shapes集合,但我不能。
从那里,我的想法是我可以从View the ViewModel (通过DataContext)获得并挂钩PropertyChanged事件。问题是DataContext还没有在构造函数中初始化,所以它是空的,并且我不能挂钩该事件。以下是代码的示例:
public CanvasView()