我再次遇到问题:
我有两个现有的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中的插件。
如何安排?
谢谢!
答案 0 :(得分:0)
你相当没有正确地模式化。您链接的示例使用MainViewModel为SingleUser View和UserList View提供支持逻辑。因为它们使用相同的ViewModel,所以两个视图使用相同的属性值。视图之间没有通信,视图只显示来自同一ViewModel的数据。
上面发布的代码显示了两个 ViewModel类,这就是造成问题的原因。我认为,您应该有一个ViewModel类来处理所有与插件相关的逻辑。这个ViewModel可能会:
ObservableCollection<Plug> Plugs
Plug SelectedPlug
其中Plugs是已发布代码中ListView的ItemsSource,而SelectedPlug是SelectedItem。