【发布时间】:2014-12-20 22:05:35
【问题描述】:
我想在我的 WPF 应用程序中实现导航(使用 MVVM 模式)。 存在以下 ViewModel:
- MainViewModel:我的应用程序“框架”包含一个功能区
- ConsignorViewModel:必须在 “框架”
- RecipientViewModel:另一个“子”视图 ...
为了让 WPF 决定必须在“框架”中显示哪个视图,我使用 DataTemplates,在 App.xaml 中声明如下:
<Application x:Class="MyProject.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:viewModels="clr-namespace:MyProject.ViewModels"
xmlns:views="clr-namespace:MyProject"
StartupUri="MainWindow.xaml">
<Application.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVis"/>
<DataTemplate DataType="{x:Type viewModels:ConsignorViewModel}">
<views:ConsignorUC />
</DataTemplate>
<DataTemplate DataType="{x:Type viewModels:RecipientViewModel}">
<views:RecipientUC />
</DataTemplate>
</Application.Resources>
</Application>
我的 MainViewModel 有一个 ViewModel 类型的属性“CurrentViewModel”(我的基类)。 ConsignorViewModel 和 RecipientViewModel 是 ViewModel。
ConsignorViewModel 的视图是“用户控件”(窗口不适用于功能区)。
<UserControl x:Class="MyProject.ConsignorUC"
...>
<UserControl.DataContext>
<local:ConsignorViewModel />
</UserControl.DataContext>
<Grid>
...
<TextBox Name="searchterm" Margin="10,10,1,1" TextWrapping="Wrap" Text="{Binding SearchTerm, UpdateSourceTrigger=PropertyChanged}" Grid.Column="1" />
...
</Grid>
</Grid>
</UserControl>
双向数据绑定在子视图中不起作用。我错过了什么?说ConsignorViewModel必须绑定到usercontrol是不是错了?
更新 我找到了问题,但没有找到解决方案: 启动应用程序时,会创建一个新的 MainViewModel 对象。因此我说
currentViewModel = new ConsignorViewModel();
现在我的子视图是 ConsignorUC。当创建一个新的 ConsignorUC 时,会创建一个新的 ConsignorViewModel 对象。所以我必须有不同的ConsignorViewModel对象,但我应该只有一个。
【问题讨论】:
-
为什么改标题?您的问题中没有关于多线程的内容,因此标题有点混乱。
-
对不起,我以为有不同的“线程”。似乎并非如此。希望新标题更好。
标签: c# wpf mvvm datatemplate