2012-07-31 112 views
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与此类似:(来源是通过视图模型暴露型产品的公共属性,组列表是集团,也通过视图模型暴露的ObservableCollection):

<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,这样我就可以防止一些不必要的操作,而这一切都会“污染”代码。

+0

对不起,什么是'GroupList'? – sll 2012-07-31 12:35:23

+1

我已经写过这个问题,GroupList是ObservableCollection ,包含一个Group项目列表。 – Goran 2012-07-31 12:36:42

+0

对不起,忽略了 – sll 2012-07-31 13:00:36

回答

0

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