Снова у меня есть проблема:Свойства привязки двух разных ViewModels
У меня есть два существующих шаблона MVVM. Все модели ViewModels основаны на ViewModelBase света MVVM.
PlugList - PlugListViewModel - PlugListView (Показывает список заглушек) Plug - PlugViewModel - PlugView (отображает свойства конкретной заглушки)
Оба вида уже используются в разных местах. Теперь мне нужен другой вид, который обеспечивает мне окно, в котором сочетаются оба ViewModels:
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>
ViewModel
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);
}
}
}
Все свойства в ViewModels определяются подобно следующий пример:
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.
Как организовать это?
Спасибо!
'Теперь я хотел бы привязать переменную PlugListViewModel к PlugViewModel.' И это не имеет смысла. – Will
Это не MVVM, как я его знаю. У вас есть, по-видимому, одна модель для одной viewmodel для одного представления. Я не собираюсь говорить, что это неправильно, но это кажется необычным. Можете ли вы опубликовать любой код, который показывает, как ваш PlugListView объединяется? – goobering
Я предоставил вам еще несколько кодов. Этот парень делает это правильно? [link] (http://www.dotnetcurry.com/showarticle.aspx?ID=1037) – MisterPresident