2012-02-26 4 views
1

나는 그리드를 가지고 있다고 가정합시다. FooHistory. 이제는 그와 관련된 많은 기능이 필요합니다. 그래서 나는 FooHistory 클래스를 만듭니다. 이제 FooHistory 클래스와 컨트롤이 있습니다. 제 MainWindow 생성자에서WPF 컨트롤에 대한 클래스를 작성해야합니까?

I는이 클래스의 새로운 인스턴스를 생성하고 같은 의존성 주입의 FooHistory 클래스 분류에 this 인스턴스 (즉 MainWindow)를 통과한다. 그런 다음 나중에 FooHistory 클래스가 FooHistory 컨트롤과 상호 작용하려는 경우 this.mainWindow.FooHistory.Items.Add(...)과 같은 작업을 수행합니다.

내 질문은 이것이 WPF 응용 프로그램을 작성하는 데 권장되는 방법인지 아니면 몇 가지 근본적인 방법이 누락 되었습니까?

답변

1

: 여기

몇 가지 샘플입니다. 세부 사항은 프로그램마다 다를 수 있지만 MVVM은 대개 3 가지 주요 부분으로 구성됩니다.

모델 : 이것은 데이터 객체입니다. 이

class Account 
{ 
    string Name {get;set;} 
    string Address {get;set; 
} 

같은 비즈니스 데이터 일 수있다뿐만 아니라 같은 UI 데이터가 될 수 있습니다

class Window 
{ 
    Point Position {get;set;} 
    Size Size {get;set;} 
} 

이러한 개체는 데이터, 아무것도 더 유지를위한 것입니다. 이벤트가없고 명령도 없습니다 (MVVM의 다른 해석이 다른 한 점).

ViewModel : 이것은 모델을 랩핑하고 기본 모델 주위에 논리를 제공하기위한 것입니다. 이 클래스는 비즈니스 모델 속성을 이해할 수있는 속성으로 변환하는데도 사용됩니다.

class AccountViewModel 
{ 
    public AccountViewModel(Account aWrappedModel) 
    { 
    } 

    string Name {get {return Model.Name;} } 

    AddressObject Address { get{ return new AddressObject(Model.Address); } 
} 

보기 :

이 사용자 컨트롤, 사용자 지정 컨트롤, 창, datatemplates 등 공통에도 불구하고 믿고, 그것의 벌금, 그렇지 않으면 당신은 뒤에보기위한 코드를 가지고 할 수있는 WPF 부분입니다 보기가 코드를 가질 수 없다는 말을 들었 기 때문에 배 워드 어를 구부릴 수 있습니다.

일반적인 접근 방식은 모델, 하나 이상의 뷰 모델을 만들고이 뷰 모델을 DataContext으로 설정하는 것입니다. 때로는 AccountViewModel에 대한 DataTemplate과 같이 주어진 데이터를 표시하는 DataTemplate이 필요합니다.

이 디자인은 MVVM의 근본이며 상당히 잘 작동하는 Databinding을 많이 사용합니다. 물론 두 가지 문제가 발생할 수 있습니다. 모델을 사용하여 Collection을 처리하는 방법은 무엇입니까? ui에서 오는 viewmodels에서 이벤트를 처리하는 방법은 무엇입니까? 내 데이터를 저장하는 방법?

그러나 여기서는 웹과 웹에서 많은 리소스를 찾을 수 있습니다. 그러나이 대답은 내가 다른 사람들이 WPF로 어떻게 작업하는지에 대한 대략적인 개요를 제공해야합니다.

1

당신의 대부분의 기능은 (UserControl을 하위 클래스) 사용자 정의 컨트롤을 만들고, .xaml 및 .xaml.cs 파일, 한 쌍을 가지고 있고 당신의 프리젠 테이션 로직을 넣을 수 있습니다 프리젠 테이션 로직 인 경우. xaml.cs 파일.

FooHistory 클래스 기능의 대부분이 비즈니스 로직 (또는 프레젠테이션 이외의 다른 것)이라면 FooHistory 클래스를 FooHistory 클래스와 분리하는 것이 좋겠지 만,이 경우 컨트롤의 인터페이스를 정의하는 것이 좋습니다. FooHistory 인스턴스에이 인터페이스를 사용하여 컨트롤에 대한 참조를 전달합니다. 이 방법으로 FooHistory 클래스는 프레젠테이션에 대해 알 필요가 없습니다. WPF인지 알 필요도 없습니다.

컨트롤 트리 (예 : SomeWindow.ParentControl.ChildControl.Items)가 전달되는 것을 피할 수 있으면 삶이 편하게됩니다.

0
예 당신이 할 수있는

......하지만 ...........는 다른 방법이 그렇게 할 필요가 없다 .........

그리드에서 사용되는 데이터의 데이터 세트를 만든 다음 전체 데이터 세트를 그리드로 가져옵니다. 그래서 여기에 항목을 추가 할 필요가 없습니다. ..... 이제 필터링, 정렬, 추가, 제거 또는 원하는 어떤 것도 할 수 있습니다 ....

1

어떤 종류의 Model-View-Presenter 패턴 , MVC의 변종. 특히 ASP.NET과 WinForms의 경우 좋은 패턴이므로 WPF의 핵심 개념을 활용하지 않습니다.

누락 된 것이 데이터 바인딩 및 명령입니다. 이 기능 외에도 MVC의 새로운 변종이 진화되었습니다. MVC (Model-View-ViewModel) (프레젠테이션 모델이라고도 함). 대략 설명 : 귀하의 창을보기라고합니다. Youd Busines Logic은 모델에 캡슐화되어 있습니다. 모델의 뷰 특정 표현 인 일부 속성을 표시하는 ViewModel 클래스를 만듭니다. VM은 또한 데이터 변경에 대해 UI에 알리는 방법을 제공하기 위해 INotifyPropertyChanged을 구현해야합니다. 동일한 방법으로 - ICommand 유형의 속성으로 작업을 노출합니다. View의 생성자에서 다음과 같이 작성하십시오 this.DataContext = new ViewModel() 그런 다음 {Binding PropName} 구문을 사용하여 View 컨트롤 속성과 ViewModel을 바인딩합니다.

는 또한 프리즘, MVVM 빛 같은 MVVM에 대한 몇 가지 프레임 워크를 체크 아웃 할 수 있습니다.우리는 우리를 프로그램 MVVM 접근 방식에 사용 http://rachel53461.wordpress.com/2011/05/08/simplemvvmexample/

+0

흥미로운 점은 MVVM을 염두에두고 만든 간단한 샘플 응용 프로그램을 보여주는 자습서/기사에 대한 정보를 얻을 수 있다는 것입니다. – Tower

+0

나는 나를 위해 좋은 것처럼 보이지만 나는 결코 이런 식으로 배우려고 노력한 적이없는 샘플을 추가했다. 그래서 나는 보장하지 않는다. 프레임 워크 문서로 시작하겠다. 항상 '시작하기'페이지 또는 simmilar가 있습니다. – Pein

+0

@rFactor : 시작하기 좋은 곳입니다. http://msdn.microsoft.com/en-us/magazine/dd419663.aspx – Grokys

관련 문제