2012-07-29 3 views
0

WP7의 바인딩에 문제가있어 도움이 될만한 예제 나 블로그를 찾을 수 없습니다. 내 응용 프로그램에는 ViewModel이 있으며 기본 페이지 (목록)에서 편집/세부 정보 페이지로 이동할 때 ListPicker 및 Object 데이터가 동일한 페이지에 올바르게 바인딩되는 데 문제가 있습니다. 나는이 일을 할 수 있었지만 이것을위한 가장 좋은 방법을 찾고 싶다. 예를 들어 WP7의 마스터 세부 바인딩

내가 클래스가 있습니다

클래스는 또한 내 뷰 모델에서 참조
public class Person 
    { 
     public string Name { get; set; } 
     public string Gender { get; set; } 
    } 

:

public Person selectedPerson; 
private Person _person 
{ 
    get { return _person; } 
    set 
    { 
     _person= value; 
     NotifyPropertyChanged("selectedPerson"); 
    } 
} 

나는 Detail.xaml 페이지가 있습니다

<StackPanel x:Name="PersonEditPanel"> 
    <TextBox x:Name="NameTextBox" Text="{Binding Name}" /> 
    <TextBox x:Name="GenderTextBox" Text="{Binding Gender}" /> 
</Stackpanel> 

을 그리고 내 코드 뒤에, 나는있다 :

private void PhoneApplicationPage_Loaded(object sender, EventArgs e) 
{ 
    DataContext = App.ViewModel.selectedPerson; 
} 

위 내용은 유용하지만 사용자 환경을 개선하기 위해 성별 속성에 ListPicker를 추가하고 싶습니다.

는이를 달성하기 위해, 나는 새로운 클래스 추가 :

public class TypeList 
    { 
     public int ID { get; set; } 
     public string Name { get; set; } 
    } 

을 그리고 내 뷰 모델에 관찰 모음을 추가 : 내가 시도

private ObservableCollection<TypeList> _PersonGenderTypeList; 
    public ObservableCollection<TypeList> PersonGenderTypeList 
    { 
     get { return _PersonGenderTypeList; } 
     set 
     { 
      _PersonGenderTypeList = value; 
      NotifyPropertyChanged("PersonGenderTypeList"); 
     } 
    } 

많은 옵션을하고있는 유일한 방법은 어디서 찾을 수 있습니다 정확하게 바인딩 된 사람 이름과 성별 목록을 선택하여 동시에 (동시에) 채울 수 있습니다.

실제 해킹과 같은 느낌이며 모범 사례가 아닙니다. 내가 여기에 뭔가를 놓치고 있습니까? 그렇다면 이것을 달성하는 더 좋은 방법이 있습니까?

+0

나는 그 일을한다고 생각하는데, 당신이 언급 한 수업에서 유스 케이스에서는 괜찮다고 생각합니다. datacontext를 설정하려면 이름, 성별 및 ObservableCollection PersonGenderTypeList가 노출 된 PersonViewModel을 만들어야합니다. 나에게 이것은 처음부터했던 것처럼 아이템 소스를 설정하는 것보다 더 나쁜 해킹처럼 들린다. –

답변

1

나는 해킹 코드를 분류하지 않을 것이므로 간단하고 작업을 수행 할 수 있습니다. 당신은 다음의 DataContext으로이보기 모델의 인스턴스를 설정할 수 있습니다

public PersonDetailsViewModel 
{ 
    public Person SelectedPerson {get;set;} 
    public ObservableCollection<TypeList> GenderList {get;set;} 
} 

: 당신이 선택한 사람과 성별 모두 포함의 MVVM 패턴을 사용하고 뷰 모델 '백업'페이지를 만들 수 있습니다 보기를 만든 다음 XAML의 다양한 UI 컨트롤을 바인딩합니다.

그러나 이전에 말씀 드렸듯이 현재 코드에는 아무런 문제가 없습니다.

+0

고마워요. 문제가 아닌 것에 대해 걱정하고있는 것 같습니다. 관심이 없으면 Detail.xaml 페이지의 XAML에서 SelectedPerson에 바인딩하는 가장 좋은 방법은 무엇입니까? 이것이 DataTemplate의 특정 구조입니까? – Gavin

관련 문제