0

すべてをできるだけ明確にするために、物事を単純化するつもりです。現在のモデルがあるとしましょう:

public class Product
{
    public int Id {get;set;}
    public string Name {get;set;}
    public int GroupId {get;set;}
    public Group Group {get;set;}
}

public class Group
{
    public int Id {get;set;}
    public string Name {get;set;}
}

そして、これに似た xaml があるとしましょう: (Source は、ViewModel を通じて公開される Product 型のパブリック プロパティであり、GroupList は Group の ObservableCollection であり、ViewModel を通じて公開されます):

<TextBlock Text="Id" />
<TextBox Grid.Column="1" Text="{Binding Source.Id}" />
<TextBlock Grid.Row="1" Text="Name" />
<TextBox Grid.Column="1" Grid.Row="1" Text="{Binding Source.Name}" />
<TextBlock Grid.Row="2" Text="Group" />
<ComboBox Grid.Column="1" Grid.Row="2"
          DisplayMemberPath="Name"
          ItemsSource="{Binding GroupList}"
          SelectedValue="{Binding Source.GroupId}"
          SelectedValuePath="Id"
          />

これはすべてうまくいきます。ただし、何らかの理由で GroupList の項目を更新する必要があるとします。ViewModel の ICommand が呼び出され、データがフェッチされ、GroupList が新しいリストに設定されます。GroupList を更新すると、現在の製品の GroupId が NULL に設定されてリセットされたようです。

リストが更新された後に手動で設定する以外に、これを処理する最善の方法は何ですか? GroupId プロパティが変更されているという事実は、このプロパティの PropertyChanged でいくつかのアクションが発生する可能性があるため、適切ではありません。そのため、プライベート bool 変数 _isRefreshing Groups も導入する必要があります。これにより、まったく必要のないアクションを防ぐことができます。これにより、コードがすべて「汚染」されます。

4

1 に答える 1

0

申し訳ありませんが、コレクションを更新した後、手動で GroupId を設定する必要があります。コレクションが更新されているかどうかを示すプロパティを使用するというアイデアは、良いアイデアです (IsBusy または IsRefreshing が私の提案です)。

于 2012-07-31T13:16:19.317 に答える