2014-03-05 2 views
0

이제 다중 모니터 환경에서 실행될 WPF 응용 프로그램을 개발했습니다. 하지만 Env에서 실행할 수있는 응용 프로그램을 설정하는 방법을 모르겠습니다.다중 모니터 및 하나의 CPU 용 WPF 응용 프로그램

enter image description here

내 경우는 위의 이미지, 하나 개의 CPU와 3 화면 같다. 이제 클라이언트가이 응용 프로그램을이 화면에서 실행하려고합니다. 또한 각 화면마다 다른 조작을 할 수 있습니다.

그래서 내가 알고 싶은 것은 내 응용 프로그램의 3 가지 인스턴스를 시작해야한다는 것입니다. 하지만이 경우 화면 1 사용자는 화면 2 및 화면 3 사용자의 다른 인스턴스를 인식하면 안됩니다.

또는 다른 방법이 있습니다. 나는이 시나리오는 단지 단일 사용하기위한 것입니다 당신이 정말로, 3 개 인스턴스를 만들려면 확실하지 않다 나에게

+0

+1 묘사. – kennyzx

+3

인스턴스 1 개, MVVM. 3보기, 1 ViewModel – Xaruth

+0

MVVM을 사용하여 응용 프로그램의 3 인스턴스를 사용하지 마십시오. 대답에 대한 나의 모든 예를 보라. – Xaruth

답변

0

Khusbhu,

도움 여러 screen.please와 함께 작동하는 방법을 알고하지 않기 때문에 단일 시스템에서 작동, 이것은 CPU가 하나의 키보드와 마우스 만 가지고 있기 때문에 클라이언트가 3을 실행해야하는 이유가 동일한 응용 프로그램을 모니터하는 이유를 이해할 수 없습니다.

예인 경우 3 개의 다른 화면에서 실행되는 3 개의 프로그램처럼 단순한 3 개의 인스턴스가 필요합니다.

더 생각이 들어이 http://www.pugetsystems.com/labs/articles/How-to-Set-Up-Multiple-Monitors-140/

감사 Nipun

+0

내 고객이 터치 모니터 –

+0

을 사용하려고합니다. 위의 링크를 읽으십시오. 여러 대의 모니터에 대한 아이디어를 얻을 수 있습니다. –

0

그것은 당신이 원하는 모든 다중 모니터를 처리 할 경우 동일한 응용 프로그램의 세 가지 경우를 발사 조금 지나친 것 같습니다에 봐. GUI의 디자인에 따라 다르지만, Screen.AllScreens을 사용하면 시스템에있는 화면과 이에 맞게 Windows를 레이아웃 할 수 있습니다. Screen에는 PrimaryScreenWorkingArea과 같은 몇 가지 속성이 있습니다. WPF를 사용하고 있다는 것을 알고 있으므로 프로젝트에 System.Windows.Forms에 대한 참조가 필요하지만 이전에는 문제없이이 작업을 수행했습니다.

+0

사용 중 GUI 만 처리 할 수 ​​있습니다. 내 화면 1 화면 사용자 누르기 버튼 저장 후 화면 2에 표시하면 안됩니다. @ 리차드 –

+1

@khushbu 미안하지만 이해가 안됩니다. 확실히 이것은 View 및 ViewModel 디자인에 달려 있습니까? – Dutts

0

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 값이 수정됩니다. 원하는 모든 뷰를 디자인하고 데이터가 어떻게 나타나고 데이터가 어떻게 표시되는지 항상 구분하는 것만으로도 충분합니다.

+0

답장을 보내 주시면 고맙겠습니다. @ Xaruth –

+0

@khushbu 유효 답변으로 표시된 것을 잊지 마세요. – Xaruth

+0

신청 팀의 사용자 수에 차이가 있으므로 내 팀과 논의한 내용이 적합하지 않습니다. . 그래서 응답을위한 thnx –

0

이해가 정확하면 고쳐주세요. 각 모니터/사용자마다 하나의 exe와 여러 개의 창이 있어야합니다.

당신은 Button1을 가지고 있고

번째 윈도 OBJE = 새로운 번째 윈도()를 만들고 해당 이벤트를 클릭하면 예를 들어 말, Obje.Show();

클릭 할 때마다 새 창 인스턴스를 만들고 각 창에 ID를 부여하고 처리합니다. 개인 INT 카운터 = 0; 번째 윈도 OBJE = 새로운 번째 윈도()는 MainWindow를 각 윈도우 인스턴스 목록에 보관 유지하려는 또는 사전 경우 클래스 레버 변수

개인 Disctionary OpenWindows를 = 새로운 Disctionary()를 가지고; 카운터 ++, Obje.WIndowId = 카운터, OpenWIndows.Add (카운터, obje), Obje.Show();

OpenWIndows를 사용할 수 있습니다. Window1 클래스에서는 카운터를 기반으로 특정 유형의 사용자를위한 코드를 작성할 수 있습니다.