를 사용하여 WPF에서 모델 속성을 액세서 방법 :내가 지금이 넓은 또는 바보 같은 질문,하지만 수 있습니다 MVVM 및 WPF 새로운 오전 MVVM 빛
내가 MVVM 패턴을 사용하고 1 뷰 모델, 여러 가지 전망을 및 몇 가지 모델. 모든보기는 내 mainwindow.xaml에있는 Usercontrols입니다.
해당 뷰는 몇 가지 속성이있는 모델에 바인딩되며 그 중 하나는 사용자 정의 컨트롤에서 그림을 동적으로 변경하는 데 사용하려고합니다.
나는이 속성에 액세스하려고 애쓰는 데 매우 어려움을 겪고 있으며이 질문에 "올바른"MVVM 방식을 사용하고 있습니다.
내 mainwindow.xaml :
<Window.Resources>
<DataTemplate DataType="{x:Type Model:Device}">
<Canvas>
<View:DeviceUserControl/>
</Canvas>
</DataTemplate>
</Window.Resources>
//---- SNIP----
<Grid Name="grid1">
<ItemsControl ItemsSource="{Binding Devices}" />
</Grid>
DeviceUserControl.xaml
//--- SNIP ---
Image Name="DeviceImage" Source="{StaticResource IconAdd}"/>
DeviceModel
//--- SNIP ---
public enum Typeenum
{
FrequenceGenerator,
Oscilloscope,
Test1,
Test2
};
public Typeenum Type { get { return type; } set { type = value; NotifyPropertyChanged("Type"); } }
내가 원하는 개체 유형에 따라 DeviceImage을 변경하십시오. dependencyproperties 시도했지만 예상대로 작동하지 않았다 (매번 같은 형식을 반환). UserControl이 인스턴스화 될 때 이미지 소스를 변경하는 데에만 관심이 있으므로 notifyPropertyChanged가 실제로 필요하지 않습니다.
먼저이 게시물에는 질문이 없습니다. 요약하자면, MVVM에서 뷰는 모델이 아닌 뷰 모델에 바인딩되어 있습니다. 좋은 접근법은 뷰 당 하나의 뷰 모델을 보유하는 것이므로 MainViewModel이있는 MainView (메인 윈도우 일 수도 있음)가 있어야합니다. 각 UserControl-View에는 UserControl-ViewModel이 있어야합니다. 이런 종류의 구조는 당신의 솔루션을 가리킨다 ... – Batuu
내 viewmodel을 뷰 당 하나의 VM으로 나누는 것이 맞다고 생각한다. 그러나 나는 아직 Mainview가 각각 자신의 viewmodel을 가진 여러개의 뷰로 구성되어있는 예제를 보지 못했습니다. –