it-source

MVVM 모델에서 모델은 INOTIFY를 구현해야 합니다.속성 변경된 인터페이스?

criticalcode 2023. 5. 16. 22:44
반응형

MVVM 모델에서 모델은 INOTIFY를 구현해야 합니다.속성 변경된 인터페이스?

에 대해 명확한 생각이 있습니다.View그리고.ViewModelMVVM 패턴으로.저는 제 애플리케이션에 MVVM 패턴을 구현할 계획입니다.저는 그 모델에 대한 문제에 직면해 있습니다. 구문 분석된 ..xml 파일에 됩니다.

모델의 변경 사항에 대해서는 처음만 통보를 받아야 합니다.앞으로는 요청에 따라 통보를 받아야 합니다.

그렇다면 모델을 어떻게 구현해야 할까요?

?를 구현해야 합니까?INotifyPropertyChanged모델 클래스에도 인터페이스가 있습니까?(모델이 구현되어서는 안 된다는 것을 읽었습니다.INotifyPropertyChanged인터페이스(WPF에 고유하므로)

»INotifyPropertyChanged는 전적으로 됩니다 - 델에서는허용니다됩모완히.

일반적으로 모델은 보기에 쉽게 바인딩할 수 있는 기능을 구현합니다.이는 일반적으로 다음을 통해 속성 및 수집 변경 알림을 지원함을 의미합니다.INotifyPropertyChanged그리고.INotifyCollectionChanged인터페이스객체의 집합을 나타내는 모델 클래스는 일반적으로 에서 파생됩니다.ObservableCollection<T>클스구, 의 합니다.INotifyCollectionChanged인터페이스

이러한 유형의 구현을 원하는지 여부는 사용자에게 달려 있지만 기억하십시오.

모델 클래스에서 필요한 인터페이스를 구현하지 않으면 어떻게 됩니까?

때때로 당신은 그것을 구현하지 않는 모델 객체들로 작업할 필요가 있을 것입니다.INotifyPropertyChanged,INotifyCollectionChanged,IDataErrorInfo또는INotifyDataErrorInfo할 수 있습니다.이 경우 뷰 모델은 모델 객체를 래핑하고 필요한 특성을 뷰에 노출해야 할 수 있습니다.이러한 속성의 값은 모델 개체에 의해 직접 제공됩니다.뷰 모델은 표시되는 속성에 필요한 인터페이스를 구현하여 뷰가 해당 속성에 데이터를 쉽게 바인딩할 수 있도록 합니다.

발췌본 - http://msdn.microsoft.com/en-us/library/gg405484(PandP.40).aspx

.INotifyPropertyChanged문제에 했습니다. 로 전달하기 전에 개체된 값. VM에서 속성을 불필요하게 복제해야 하는 동시에 BL/DL에 전달하기 전에 기본 개체(업데이트된 값)를 업데이트해야 했습니다.

모델 개체(예: 편집 가능한 그리드 또는 목록) 또는 복잡한 모델을 수집해야 하는 경우 특히 문제가 발생합니다. 모델 개체는 자동으로 업데이트되지 않으므로 VM에서 이를 모두 관리해야 합니다.

은 "MVVM"을 구현하는 것입니다.INotifyPropertyChangedView Model에서만 사용할 수 있습니다.이 목적은 View 모델에서 무언가가 변경될 때 View의 적절한 바인딩을 새로 고치기 위한 것입니다.

그러나 이는 뷰별모델의 변경 사항을 대상으로 합니다.즉, 다음에서 값을 변경할 때TextBox,INotifyPropertyChangedView 모델에서 구현하면 관련 바인딩이 새로 고쳐지므로 View가 올바르게 업데이트됩니다.

데이터베이스 변경이나 다른 인터페이스와 같은 외부 소스에 의해 모델이 변경된 내용은 다루지 않습니다.모든 데이터 수정이 View에서 발생하는 한 View Model은 모든 변경 사항을 인식하고 업데이트할 내용을 알고 있어야 합니다.예를 들어, 변수를 변경하는 것을 알고 있는 경우Foo에서 당신의 의 값도 됩니다.Bar당신의 모델에서, 둘 다 부르는 것이 현명할 것입니다.OnPropertyChanged(Foo)그리고.OnPropertyChanged(Bar)에서 "ViewModel" 할 수 .Foo.

다른 방법은 모델과 뷰 모델 사이의 이벤트를 사용하여 업데이트가 필요한 뷰 모델의 값을 새로 고치는 것입니다.사용자가 말했듯이 알림이 "처음에만" 필요한 경우 일부 트리거에서 한 번 오프 새로 고침을 수행하는 수동도 작동해야 합니다.

은 MVVM을할 때 입니다. MVVM을 사용할 때 발생하는 입니다.INotifyPropertyChanged되지 않습니다.System.ComponentModel따라서 솔루션에 WPF 관련 참조를 추가할 필요가 없습니다.

이 구할경을 한다면,INofityPropertyChanged모델에서 View Model(프록시 속성)에 훨씬 더 많은 코드를 저장할 수 있습니다.이 따서모서사것용허은용다니됩는하라델에다▁uses니▁so를 사용하는 것은 허용됩니다.INotifyPropertyChanged.

때때로 모델이 다음을 구현하도록 하는 것이 허용됩니다.INotifyPropertyChanged인터페이스

예를 들어 모델에 시각화할 속성이 많고 이러한 모델 속성을 노출하기 위해 뷰 모델에 많은 코드(프록시 속성)를 구현하지 않도록 하려면 다음과 같이 하십시오.

http://msdn.microsoft.com/en-us/magazine/ff798279.aspx 을 보세요.

이것은 "순수한" MVVM 코더와 다른 사람들 사이의 고전적인 논쟁입니다.

대부분의 시간이 말이 되기 때문에 저는 할 수 있을 때마다 책을 읽는 경향이 있습니다.그러나 특정 시나리오에서는 필요에 따라 코드를 즉흥적으로 수정하면 중복 코드가 많이 줄어듭니다.

이 경우 XML을 모델 클래스로 읽고 모델 클래스를 뷰 모델로 복사하거나 모델에서 뷰 모델로 원하는 속성을 복사할 수 있습니다.이렇게 하면 UI/모델을 업데이트할 수 있습니다.첫 번째 접근 방식을 따르는 경우 모델 클래스에서 변경된 특성을 구현해야 하며 이를 허용할 수 있습니다.

두 번째 접근 방식은 뷰에 표시/조작되는 모든 속성을 정확하게 제어할 수 있기 때문에 최선을 다해 두 번째 접근 방식을 따르겠다고 말했습니다.또한 MVVM 패턴을 깨지 않아 훨씬 기분이 좋아질 것입니다.

무슨 말씀이신지 잘 모르겠습니다. 수 .INotifyPropertyChanged DependencyProperty-es은 또는종성Property-es(VM은 은경이속함파야어서생되에음)에서 .)DependencyObject둘 다 갖는 것은 말이 안 됩니다.또한 그들 중 아무도 없다는 것도 말이 안 됩니다.

모델에서는 원하는 것을 무엇이든 할 수 있습니다.이벤트를 발사/수신하는 능력은 좋지만 항상 신뢰할 수 있는 것은 아닙니다.기본적으로 모델은 소스 데이터 및 관련 항목에 따라 달라지는 반면 뷰 모델은 모델과 프레젠테이션 계층을 연결하는 부하를 가집니다.WPF는 이벤트에 대해 작동하므로 VM에서 최소한 몇 가지 알림 메커니즘을 제공해야 합니다.

언급URL : https://stackoverflow.com/questions/6922130/in-mvvm-model-should-the-model-implement-inotifypropertychanged-interface

반응형