중첩 된 뷰를 사용하는 이미 작동중인 응용 프로그램에서 중첩 된 ViewModels을 구성하려고합니다.MVVM 중첩 된 하위 뷰를 하위 뷰 모델로 연결
MainWindow를보기 :
<Window x:Name="FCTWindow" x:Class="CatalogInterface.MainWindow"
xmlns:local="clr-namespace:CatalogInterface"
xmlns:vm="clr-namespace:CatalogInterface.ViewModels"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="532">
<Window.Resources>
<vm:MainWindowViewModel x:Key="ViewModel" />
</Window.Resources>
<Grid DataContext="{Binding Path=ViewModel.DirFilesListBoxViewModel}" x:Name="BodyGridLeft" Grid.Row="0" Grid.Column="0">
<local:ctlDirFilesListBox>
<!--
Need to access the `ItemsSource="{Binding }"` and
`SelectedItem="{Binding Path=}"` of the ListBox in
`ctlDirFilesListBox` view -->
</local:ctlDirFilesListBox>
</Window>
아이보기 : 여기에 내가 뭘 원하는지의 예
<UserControl x:Class="CatalogInterface.ctlDirFilesListBox"
xmlns:local="clr-namespace:CatalogInterface"
xmlns:vm="clr-namespace:CatalogInterface.ViewModels"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid x:Name="MainControlGrid">
<ListBox SelectionChanged="ListBoxItem_SelectionChanged"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="#FFFFFF"
Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="3" BorderThickness="0">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
<EventSetter Event="MouseDoubleClick" Handler="ListBoxItem_MouseDoubleClick"/>
<EventSetter Event="KeyDown" Handler="ListBoxItem_KeyDown"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</Grid>
</UserControl>
MainWindowViewModel
using System;
using System.Text;
namespace CatalogInterface.ViewModels
{
class MainWindowViewModel
{
public DirFilesViewModel DirFilesViewModel { get; set; }
public MainWindowViewModel()
{
DirFilesViewModel = new DirFilesViewModel();
}
}
}
그래서, 나는이 ListBox.SelectedItem
를 연결해야하고 ListBox.ItemSource
은 MainWindowViewModel.DirFilesViewModel
의 속성으로 바인딩합니다. 캐치는 MainWindow View
이 아닌 ctlDirListBox
뷰에서 바인딩을 수행해야합니다.
내 하위보기의 요소에 어떻게 액세스합니까? 내 가장 큰 장벽이라고 생각합니다. 모든 데이터 컨텍스트가 옳다고 생각합니다. 하위 뷰 요소에 대해서는 논쟁 할 수 없습니다.
UserControls는 모델 또는 뷰 모델에 맞게 설계되어야합니다. UserControl에 대한 뷰 모델을 디자인하면 안됩니다. TextBox에 TextBoxViewModel이 있습니까? ** 아니, ** 그리고 아주 좋은 이유가 있습니다. 이 안티 패턴의 실생활 예제와 왜 그렇게 열심히 실패하는지 [이 답변] (https://stackoverflow.com/a/44729258/1228)을 읽어보십시오. – Will