刷新查找列表的数据源

时间:2012-07-31 12:32:51

标签: wpf data-binding wpf-controls

我将简化事情,尽可能让一切清晰。让我们说我有现在的模型:

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,这样我可以在根本不需要它们时阻止它们,这就是所有“污染”代码。

1 个答案:

答案 0 :(得分:0)

很抱歉,您必须在刷新收藏后手动设置GroupId。使用指示集合是否令人耳目一新的属性的想法是不错的(IsBusy或IsRefreshing是我的建议)。