2012-11-08 4 views
3

안녕하세요, MVVM 및 Win8 앱 개발에 대해 배우고 있습니다. ObservableCollection (NoteViewModel.cs에 있음)을 XAML을 통해 내 MainPage 목록 상자 (또는 listview)에 바인딩하는 데 문제가 있습니다.컬렉션을 목록 컨트롤에 바인딩합니다.

public ObservableCollection<Note> NotesList; 

모델은 NoteText, 우선 순위 및 RemindDate를 보유하고 간단한 Note.cs 클래스입니다.

현재 내가하고있는 일은 ObservableCollection에 대한 MainPage.xaml.cs 012h의 코드 숨김 파일에 DataContext를 설정하는 것입니다.

public MainPage() 
{ 
    this.InitializeComponent(); 
    NoteViewModel nvm = new NoteViewModel(); 
    noteListView.DataContext = nvm.NotesList; 
} 

그리고 NoteViewModel 생성자에서

난 그저 내가 다음 컬렉션에 추가 2 새 노트를 만들 수 있습니다.

XAML에서 DataContext를 NoteViewModel로, ItemsSource를 NotesList로 설정하고 싶습니다. 나중에 하나의 노트에 DetailsView를 구현하려고합니다.

리스트 박스에 컬렉션을 바인딩하는 튜토리얼이 많이 있는데, 입니다.하지만 MVVM 올바른 방법을 보여주는 것을 발견하지 못했습니다.

어떤 도움이 필요합니까?

답변

3

당신은 오히려보기의 XAML에서

그런 다음 컬렉션에 목록의 DataContext를 설정보다, 당신의 ViewModel에보기 (MainPage)를 결합해야합니다, 당신은 재산

NotesList 당신의 ViewModels에 목록의 ItemSource를 바인딩

EG

의 ViewModel : 당신은 여전히 ​​코드에서 DataContext를 설정할 수 있습니다

public NoteViewModel : INotifyPropertyChanged 
{ 
    //Collection must be a property 
    public ObservableCollection<Note> NotesList {get; private set;} 

    public NoteViewModel() 
    { 
    //Initialize your collection in the constructor 
    NotesList = new ObservableCollection<Note>() 
    } 

    //. 
    //. 
    //. 

} 

뒤에 당신은

public MainPage() 
{ 
    this.InitializeComponent(); 
    NoteViewModel nvm = new NoteViewModel(); 
    this.DataContext = nvm; 
} 

은 또한 당신이 당신의보기의 XAML을 통해 DataContext를 설정할 수 있습니다 원하는 경우.당신의 ViewModel 가정하면 네임 스페이스에 MyProject에 있습니다

이 자원에 주요 컨테이너의 DataContext에 바인드한다 리소스로 뷰 모델을 추가 네임 스페이스

<UserControl x:class=MyProject.MainPage 
    xmlns:local="clr-namespace:MyProject" 
    . 
    . 
> 

<UserControl.Resources> 
    <local:NoteViewModel x:Key="NoteViewModel"/> 
</UserControl.Resources> 

을 참조를 추가

<Grid x:Name="LayoutRoot" DataContext="{StaticResource NoteViewModel}"> 

DataContext를 설정 한 후에는 I 간단한 테스트 케이스 시나리오의 바인딩

ItemSource={Binding NotesList} 
+0

괜찮 았던 것 같습니다! codebehing이 아닌 XAML에서 dataContext를 설정하는 방법을 알려주시겠습니까? –

+1

xaml 접근 방식으로 답변을 업데이트했습니다. – wdavo

+0

고마워요, 이제 작동합니다. 이제 목록의 스타일을 지정하고 세부 정보보기를 만들 수 있습니다. –

0

힘들이지 않은 mvvm을 적용하기 위해 라이브러리를 배우려고하는데 caliburn micro을 사용합니다. 설치가 쉽고 많은 유용한 구성 요소를 제공합니다.

+1

이 앱은 나중에 내가 문서화하고 설명해야하는 학교 프로젝트이기 때문에 추가 라이브러리에 의지하고 싶지 않지만 다른 취미 앱에서는 계속 염두에 두어야합니다! –

1

를 통해 notesListView 제어를위한 temSource,이 시도 :

을 만들기 당신의 ViewModel을 :

// Create a property as an ObservableCollection<YourType> LstItemName in your ViewModel 
// On your ViewModel constructor, create a new LstItemName instance. 
// Create a property as "YourType" ItemName to bind to the selected Item of your List 

보기 만들기 :

// Create a property of your ViewModel (codeBehind) 
// On your Views Constructor, create a new ViewModel instance. (codeBehind) 
// On loaded event of your View set the DataContext = ViewModel (codeBehind) 

목록의 XAML에서 :

<List  
ItemSource={Binding LstItemName} 
SelectedItem={Binding ItemName} 
/> 

ViewModel을 사용하여 목록을 추가하는 것을 잊지 마십시오.

관련 문제