2014-11-29 1 views
0

저는 C sharp와 모든 MVVM에 대해 아주 새롭기 때문에 저의 문제를 풀려고했지만 며칠 동안 결과가 없으므로 여기에 글을 남깁니다. . 호스텔 예약 및 추가 프로그램이 있습니다. 먼저 하나의보기 페이지에 호스텔을 추가 할 수 있습니다.이 페이지는 SQLite 데이터베이스에 추가 된 다음 호스텔 목록에 추가됩니다. 두 번째보기 페이지에서 나는 호스텔 예약을 공식적으로 받았다. 예약하려는 호스텔을 선택할 때 호스텔 목록과 함께 목록보기가 있습니다. ItemSource를 목록 (호스텔 목록)에 바인딩하여 모든 호스텔을 볼 수 있지만 NewItem을 NewReservation.HostelName에 바인딩하려고 할 때 아무 것도하지 않습니다. 여기에 목록보기의 코드는 다음과 같습니다Visual Studio Listview 바인딩 선택한 항목 두 가지 방법 MVVM

<StackPanel Orientation="Horizontal" Margin="0,0,0,0"> 
      <TextBlock Text="Hostel name" Width="160" Margin="12,12,12,12" Height="20" Foreground="Black" FontFamily="Microsoft JhengHei Light" FontSize="18" /> 
      <ListView Margin="10,0,0,0" Width="223" ItemsSource="{Binding List}" SelectedItem="{Binding NewReservation.hostelName, Mode=TwoWay}" Height="100" Background="#FFD3DCC1" Foreground="#FF183440" RequestedTheme="Dark" Padding="5,5,5,0"> 
       <ListView.DataContext> 
        <viewModel:ViewModel/> 
       </ListView.DataContext> 
      </ListView> 

     </StackPanel> 

나는 다음과 같은 새로운 예약을 정의한 뷰 모델에서, 그래서이 프로그램은, MVVM로 실행 :

또한
public Reservation NewReservation 
    { 
     get { return _newReservation; } 
     set 
     { 
      _newReservation = value; 
      NotifyPropertyChanged("NewReservation"); 
     } 
    } 

I이 많은 분야로 예약라는 클래스 -하지만 hostelName 만 업데이트하여 사용자가 호스텔을 예약 할 때 호스텔의 목록보기에서만 선택 항목을 선택하고 NewReservation.hostelName에 호스텔 이름을 바인딩합니다. 또한 Mode = TwoWay is is 거기에, 그래서 그것은 정말로 생각한다.

문제는이 프로그램을 디버깅하고 각 코드 행을 단계별로 진행할 때 NewReservation.hostelName을 채우지 않을 것이라는 점입니다. ComboBox에서도이 방법을 시도했지만 결과는 없습니다. 흥미로운 점은 호스텔의 세부 정보를 보는 것뿐입니다 (사용자가 listview에서 호스텔을 선택한 다음 텍스트 블록에 데이터를 표시 함 - 이는 정상적으로 작동 함). 그러나 나는 정말로 listview에서 NewReservation에 숙소의 이름을 보내는 방법을 알 수 없다. 내가 TextBox를 좋아할 때 - 따라서 사용자는 수동으로 Hostel의 이름을 입력해야합니다. 제대로 작동하고 있습니다. 텍스트 상자의 텍스트를 NewReservation.hostelName에 바인딩하면 모든 것이 제대로 작동합니다. 그러나 어떤 이유로 나는 목록 상자 또는 콤보 상자를 사용하여이 작업을 수행 할 수 없습니다 ...

나는 또한 ViewModel에서 SelectedHostelReservation을 만들고이 사람에게 바인딩 한 다음 NewReservation.hostelName으로 데이터를 보냅니다. 그러나 이것은 저에게 쓸데없는 느낌을 주며, 프로그램을 좀 더 긴 방법으로 만들 것입니다.

그래서 바인딩에 논리 또는 논리를 연결하기 위해 뭔가가 누락 되었습니까? 나는 정말로 모른다. .. 어떤 대답이라도 당신에게 감사해라. - 숙소 클래스의 코드 목록의 선언에 대한 코드는 그래서 호스텔 클래스의 관찰 모음입니다이

private ObservableCollection<Hostel> _list; 
public ObservableCollection<Hostel> List 
    { 
     get { return _list; } 
     set 
     { 
      _list = value; 
      NotifyPropertyChanged("List"); 
     } 
    } 

입니다 : 여기

, 나는 늦게 응답 죄송합니다 요청 업데이트입니다 이름, 전화 번호, 이메일 주소와 같은 단순한 모델 일뿐입니다 ...

그리고 우리는 이름과 같은 성질을 가진 예약 클래스를 가지고 있습니다. 그러나 호스텔을 예약 한 사람에게는 hostelName이 있습니다. 우리가 예약하고 싶은 호스텔의 이름, 그리고 다른 많은 것들 ... 나는 cont 내선을 ViewModel에 스택 패널에 추가 - ObservableCollection (위)과 NewReservation thingy ...도 정의되어 있습니다. 그래서 ObservableCollection List에 항목 소스를 바인딩하고 NewReservation.hostelName에 선택한 항목을 바인딩해야한다고 말합니다. , Mode = TwoWay - NewReservation에 데이터를 전송해야합니까? 아니면 substep 같은 것을 만들지 - SelectedHostelName과 같이 첫 번째에 바인딩하고 NewReservation.hostelName으로 보냅니다.

답변

1

목록 컬렉션이 문제라고 생각합니다.리스트 개체의 정의를 나에게 줄 수 있습니까? 호스텔 이름의 컬렉션 또는 호스텔 컬렉션입니까?

목록은 문자열 유형 모음이어야합니다. 그건 입니다.ListView에는 호스텔의 "문자열"형식의 이름 모음이 있어야합니다. 이 중 하나를 선택하면 NewReservation.hostelName에 할당 할 선택된 이름이 반환됩니다.

+0

그 목적은 @lukas ... 해결합니까? !!? 그렇다면 대답으로 표시하십시오. – King