MVVM 응용 프로그램을 만들면 문제가 매우 간단합니다. 1 ViewModel (기능)을 위해 많은 View (UI)를 연결할 수 있습니다. 단일 응용 프로그램에서 하나의 ViewModel 인스턴스를 만들고 각 뷰의 DataContext를이 뷰 모델로 설정하십시오. 각보기는 다른 모니터, 서로 다른 크기, 내용이 다를 수 있습니다 ...
먼저
전체 예
, 그리고 모델 (= 데이터)
using System;
namespace WpfApplication1
{
public class MyModel
{
public String Text1 { get; set; }
public Int32 Int1 { get; set; }
public Int32 Int2 { get; set; }
}
}
를 작성,
using System;
namespace WpfApplication1
{
public class MyViewModel
{
private MyModel myModel;
public MyViewModel()
{
this.myModel = new MyModel() { Int1 = 1, Int2 = 12, Text1 = "toto" };
}
public String MyText
{
get { return this.myModel.Text1; }
set { this.myModel.Text1 = value; }
}
public Int32 MyInt1
{
get { return this.myModel.Int1; }
set { this.myModel.Int1 = value; }
}
public Int32 MyInt2
{
get { return this.myModel.Int2; }
set { this.myModel.Int2 = value; }
}
}
}
다음 (데이터가 상호 작용하고 살아야하는 방법)을 뷰 모델, 첫 번째보기 (UI, 데이터 표시 방법)
,623,210
이 뷰 (에만 UI 코드)에 대한 코드 숨김 (제 상이한)
using System.Windows;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for View1.xaml
/// </summary>
public partial class View1 : Window
{
public View1()
{
InitializeComponent();
}
public View1(MyViewModel viewModel)
: this()
{
this.DataContext = viewModel;
}
}
}
제 2도 (제 1 및 제 2의 상이한)
<Window x:Class="WpfApplication1.View2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="View2" Height="300" Width="300"
Background="{StaticResource {x:Static SystemColors.ControlBrushKey}}"
xmlns:local="clr-namespace:WpfApplication1"
>
<Window.DataContext>
<local:MyViewModel />
</Window.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBox Text="{Binding MyText, UpdateSourceTrigger=PropertyChanged}" />
<Slider Value="{Binding MyInt1, UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" />
</Grid>
</Window>
using System.Windows;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for View2.xaml
/// </summary>
public partial class View2 : Window
{
public View2()
{
InitializeComponent();
}
public View2(MyViewModel viewModel)
: this()
{
this.DataContext = viewModel;
}
}
}
제 3 관점
<Window x:Class="WpfApplication1.View3"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="View2" Height="300" Width="300"
Background="{StaticResource {x:Static SystemColors.ControlBrushKey}}"
xmlns:local="clr-namespace:WpfApplication1"
>
<Window.DataContext>
<local:MyViewModel />
</Window.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBox Text="{Binding MyText, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Text="{Binding MyInt1, UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" />
<TextBox Text="{Binding MyInt2, UpdateSourceTrigger=PropertyChanged}" Grid.Row="2" />
</Grid>
</Window>
using System.Windows;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for View3.xaml
/// </summary>
public partial class View3 : Window
{
public View3()
{
InitializeComponent();
}
public View3(MyViewModel viewModel)
: this()
{
this.DataContext = viewModel;
}
}
}
그리고 마무리, 모든 뷰가 호출되는 시작 지점 :
public MainWindow()
{
MyViewModel myOnlyViewModel = new MyViewModel();
View1 view1 = new View1(myOnlyViewModel);
view1.Show();
View2 view2 = new View2(myOnlyViewModel);
view2.Show();
View3 view3 = new View3(myOnlyViewModel);
view3.Show();
}
위에서 볼 수 있듯이 UI의 각 변경 사항은 다른 UI에 표시됩니다 (앱 인스턴스를 세 번 실행할 필요가 없으며 1!). 예를 들어, 슬라이더를 움직이면 다른보기의 MyInt1 값이 수정됩니다. 원하는 모든 뷰를 디자인하고 데이터가 어떻게 나타나고 데이터가 어떻게 표시되는지 항상 구분하는 것만으로도 충분합니다.
+1 묘사. – kennyzx
인스턴스 1 개, MVVM. 3보기, 1 ViewModel – Xaruth
MVVM을 사용하여 응용 프로그램의 3 인스턴스를 사용하지 마십시오. 대답에 대한 나의 모든 예를 보라. – Xaruth