gpt4 book ai didi

c# - 如何从另一个 View 模型实例化和显示一个 ViewModel

转载 作者:太空狗 更新时间:2023-10-29 23:34:03 25 4
gpt4 key购买 nike

我是 MVVM 的新手,我关注了 josh smith article我正在努力开发我的第一次尝试。在我的例子中,我有一个主窗口,其中有一个主视图模型:

var vm = new MainVM();
MainWindow window = new MainWindow();
window.DataContext = vm;

我有两个 View 模型 ItemSuppliersViewModelSuppliersViewModel 使用 datatemplate 绑定(bind)到两个 View ItemSuppliersSuppliersView 在主窗口resourcedictionary如下:

<DataTemplate DataType="{x:Type VM:ItemSuppliersViewModel}">
<VV:ItemSuppliersView/>
</DataTemplate>
<DataTemplate DataType="{x:Type VM:SuppliersViewModel}">
<VV:SuppliersView/>
</DataTemplate>

在主窗口中,我有一个列表框显示绑定(bind)到的项目列表:

<ListBox x:Name="ItemsListBox" ItemsSource="{Binding AllItems}" SelectedItem="{Binding     SelectedItem}" DisplayMemberPath="Item_Name" />

AllItems 是主视图模型公开的公共(public)属性:

public IList<Item> AllItems { get { return (IList<Item>)_itemsRepository.FindAll(DetachedCriteria.For<Item>()); } }

当用户从列表框中选择一个项目时,将显示与该项目相关的一些数据的列表,由 ItemSuppliers View 模型和 ItemSuppliersView 表示,并显示到使用 itemscontrol 的网格:

<Grid Margin="246,132,93,94">
<ItemsControl ItemsSource="{Binding ItemSuppliersVM}" Margin="4"/>
</Grid>

ItemSuppliersVM 在主视图模型中公开如下:

ItemSuppliersViewModel itemSuppliersVM;
public ItemSuppliersViewModel ItemSuppliersVM
{
get
{
return _itemSuppliersVM;
}
set
{
_itemSuppliersVM = value;
OnPropertyChanged("ItemSuppliersVM");
}
}

这是绑定(bind)到列表框所选项目的 selecteditem 属性:

    public Item SelectedItem
{
get
{
return _selectedItem;
}
set
{
_selectedItem = value;
OnPropertyChanged("SelectedItem");
ShowItemSuppliers();
}
}

创建 itemsuppliers View 模型的 showItemSuppliers:

void ShowItemSuppliers()
{
_itemSuppliersVM = new ItemSuppliersViewModel(_itemsRepository, _selectedItem, new DateTime(2011, 03, 01), new DateTime(2011, 03, 30));
}

The problem is that when selecting any item in the list box nothing happened, however the itemsrepository is tested and works fine, when I but a break point all bindings are working and it walks through the selecteditem 属性,然后是 showitemsuppliers() 方法。

我认为问题出在这个方法中,那么问题出在哪里,这个方法是在主窗口 View 模型中实例化 ItemSuppliersViewModel 的正确方法吗?

最佳答案

您是直接设置字段,而不是引发 PropertyChanged 事件。如果不引发该事件,绑定(bind)引擎将不知道您的属性已更改。如果你改变

_itemSuppliersVM = new ItemSuppliersViewModel(_itemsRepository, _selectedItem, new DateTime(2011, 03, 01), new DateTime(2011, 03, 30));

ItemSuppliersVM = new ItemSuppliersViewModel(_itemsRepository, _selectedItem, new DateTime(2011, 03, 01), new DateTime(2011, 03, 30));

您的绑定(bind)应该有效。

关于c# - 如何从另一个 View 模型实例化和显示一个 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6964454/

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