【发布时间】:2015-04-13 18:21:23
【问题描述】:
我又遇到了一个问题:
我有两个现有的 MVVM 模式。 所有的 ViewModel 都基于 MVVM light 的 ViewModelBase。
PlugList - PlugListViewModel - PlugListView(显示插头列表) Plug - PlugViewModel - PlugView(显示特定插头的属性)
这两种视图已经在不同的地方使用过。 现在我需要另一个视图,它为我提供了一个合并两个 ViewModel 的窗口:
PlugListViewModel_Window - PlugListView_Window
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="5"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<View:View_PlugList x:Name="PlugListView" DataContext="{Binding Path=ViewModel_PlugList, UpdateSourceTrigger=PropertyChanged}" Grid.Column="0"/>
<GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Stretch" />
<View:View_Plug x:Name="PlugList" DataContext="{Binding ViewModel_Plug}" Grid.Column="2"/>
</Grid>
视图模型
class ViewModel_PlugListWindow : ViewModelBase
{
public ViewModel_PlugListWindow()
{
}
private const string ViewModel_PlugList_PropertyName = "ViewModel_PlugList";
private ViewModel_PlugList _ViewModel_PlugList;
public ViewModel_PlugList ViewModel_PlugList
{
get
{
return _ViewModel_PlugList;
}
set
{
_ViewModel_PlugList = value;
RaisePropertyChanged(ViewModel_PlugList_PropertyName);
}
}
private const string ViewModel_Plug_PropertyName = "ViewModel_Plug";
private ViewModel_Plug _ViewModel_Plug;
public ViewModel_Plug ViewModel_Plug
{
get
{
return _ViewModel_Plug;
}
set
{
_ViewModel_Plug = value;
RaisePropertyChanged(ViewModel_Plug_PropertyName);
}
}
}
视图模型中的所有属性都定义如下:
private const string SelectedPlugPropertyName = "SelectedPlug";
private RaControlPlug _SelectedPlug;
public RaControlPlug SelectedPlug
{
get
{
return _SelectedPlug;
}
private set
{
_SelectedPlug = value;
RaisePropertyChanged(SelectedPlugPropertyName);
}
}
PlugListView:
<UserControl x:Class="RaControlRuleConfig.View.View_PlugList"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ViewModel="clr-namespace:RaControlRuleConfig.ViewModel"
xmlns:local="clr-namespace:RaControlRuleConfig"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel>
<Button Content="Add Plug" Command="{Binding AddPlugCommand}"/>
<ListView ItemsSource="{Binding PlugList}" SelectedItem="{Binding SelectedPlug}">
<ListView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:RaControlPlug}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackPanel>
</UserControl>
现在我想将 PlugListViewModel 的变量绑定到 PlugViewModel。 (SelectedPlug 应该是 PlugViewModel 中的插件。
如何安排?
谢谢!
【问题讨论】:
-
Now I would like to bind a variable of PlugListViewModel to PlugViewModel.这毫无意义。 -
这不是我所知道的 MVVM。显然,您有一个模型到一个视图模型到一个视图。我不会说这是错误的,但它似乎不寻常。你能发布任何代码来显示你的 PlugListView 是如何组合在一起的吗?
-
我为您提供了更多代码。这个人的做法是否正确? link
标签: c# wpf mvvm binding viewmodel