2011-01-18 2 views
0

내 앱에는 저장/편집 페이지가 있습니다. 현재 흐름은 다음과 같습니다 : 사용자는 요소 목록과 함께 메인 페이지를 가지고 있습니다. 그는 "추가"버튼을 클릭 할 수 있으며 정보를 입력하고 저장할 수있는 "추가"페이지로 이동합니다. 그가 그것을하면 정보가 저장되고 목록에 표시됩니다. 그는 목록에서 클릭하면 정보를 변경할 수있는 "편집"페이지로 이동합니다.편집 페이지의 목록 상자에서 "이전 값"을 선택하십시오.

사실 추가 및 편집 페이지는 동일하며 두 번째 필드는 채워진 필드가 있지만 첫 번째 필드에는 채워지지 않습니다.

나는이 페이지에 3 개의 목록 상자를 가지고 있는데, 하나는 심각도, 하나는 범주 및 하나는 리포터입니다. 이 정보는 저장하기 전에 목록 상자에서 선택되며 편집 단계에서 사용자가 "이전"값을 알 수 있도록 자동으로 선택되어야합니다.

내 XAML 1에서 :

<ListBox Height="103" Name="lbSeverities" Width="439" HorizontalAlignment="Left" Margin="20,0,0,0" SelectionMode="Single" ItemsSource="{Binding Severities}" DisplayMemberPath="Name" SelectedItem="{Binding Task.Severity}"/> 

그리고 나는 또한 합리적인 구현 심각도 클래스의 Equals 메서드를 오버라이드 (override) 나는 두 가지 방법을 시도, 자동으로 값을 선택합니다.

내 XAML

<ListBox Height="103" Name="lbSeverities" Width="439" HorizontalAlignment="Left" Margin="20,0,0,0" SelectionMode="Single" ItemsSource="{Binding Severities}" DisplayMemberPath="Name" SelectedIndex="{Binding Task.Severity, Converter={StaticResource SeverityToIndexConverter}}"/> 

에서 2 그리고 나는이 코드를 사용하여 SeverityToIndexConverter 생성 :

public class SeverityToIndexConverter : IValueConverter 
    { 

     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      if (value != null && value is Severity) 
      { 
       Severity currentSeverity = (Severity)value; 
       for (int i = 0; i < (App.Current as App).MainViewModel.Severities.Count; i++) 
       { 
        Severity sev = (App.Current as App).MainViewModel.Severities[i]; 
        if (currentSeverity.ID == sev.ID) 
         return i; 
       } 
      } 
      return -1; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 

둘은 동일한 결과 발표 : 때때로 값이 자동으로 선택됩니다,하지만 때로는하지 . 그것이 선택되면 매우 불안정합니다. 나는 약간의 예외에 대해 상상했는데 그것을 잡으려고했지만 아무 것도 얻지 못했습니다. 또한 디버깅을 시도했는데, 케이스 1에서 equals 메서드가 컬렉션의 모든 멤버에 대해 병렬로 호출되므로 두 번째 방법을 시도했습니다. 디버깅을해도 아무런 답을 얻지 못했습니다.

비슷한 상황에 직면 한 사람이 있습니까? 사용자가 "편집"페이지에 들어갈 때 목록 상자 값을 선택하도록하려면 어떻게해야합니까?

덕분에, 오스카

답변

1

나는 같은 일을. 내 xaml은 첫 번째 예제처럼 보입니다.

는 여기에 내가 할 줄 작업은 다음과 같습니다

심각도라는 새 속성을 만듭니다. getter에서 Task.Severity를 ​​반환합니다. SelectedItem 목록 상자를 새 속성에 바인딩하십시오.

목록 상자에 목록이로드 된 후에는 새 속성에서 NotifyPropertyChanged를 호출해야 할 수도 있습니다.

관련 문제