2011-01-18 10 views
0

私のアプリには保存/編集ページがあります。 現在のフローは次のとおりです。ユーザはメインページを持ち、要素のリストを持ちます。彼は「追加」ボタンをクリックすることができ、情報を入力して保存することができる「追加」ページに移動します。彼がそれをすると、その情報は保存され、リストに表示されます。 リスト内をクリックすると、彼は情報を変更できる「編集」ページに移動します。編集ページのリストボックスで「古い値」を選択してください

実際には、[追加]ページと[編集]ページは同じですが、2番目のフィールドには最初のフィールドが入力されていません。

私はこのページに3つのリストボックスを持っています.1つは重大度、1つはカテゴリ、1つはレポーターです。この情報は保存前にリストボックスで選択され、編集フェーズでは自動的に選択されるべきで、ユーザは「古い」値を知っているはずです。

私の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メソッドをオーバーライドし は、私は2つのアプローチを試みたが、自動的に値を選択します。私のXAMLで

2 -

<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}}"/> 

そして、私はこのコードで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メソッドがコレクションのすべてのメンバーに対して並行して呼び出されていることに気づいたので、2番目のアプローチを試しました。デバッグは私に何の答えももたらしませんでした。

誰も同じような状況に直面しましたか? ユーザーが[編集]ページに入力したときにリストボックスの値を選択できるようにするにはどうすればよいですか?

おかげで、 オスカー

答えて

1

私は同じことを行います。私のxamlはあなたの最初の例のようです。

ここで私は何をしますか:

「Severity」という新しいプロパティを作成します。 getterでTask.Severityを返します。リストボックスSelectedItemを新しいプロパティにバインドします。

リストボックスにリストがロードされると、新しいプロパティでNotifyPropertyChangedを呼び出さなければならない場合があります。

関連する問題