2013-08-16 41 views
1

这是我工作的代码,“值不在预期范围”列表集合,而不是在观察集合

private ObservableCollection<User> _Users; 
public ObservableCollection<User> Users 
{ 
    get { return _Users; } 
    set { _Users = value; RaisePropertyChanged(()=> Users); } 
} 

Users = new ObservableCollection<User>(); 
for (int i = 1; i <= 10; i++) 
{ 
    Users.Add(new User() 
    { 
     ADDRESS_LINE_1 = "Test Address", 
     ADDRESS_LINE_2 = "Test Address 2", 
     FIRST_NAME = "Test Name " + i, 
     SURNAME = "Test surname " +i, 
     DATE_OF_BIRTH = DateTime.Now.Date, 
     GENDER = "M", 
     MOBILE_PHONE_NUMBER = "+1100000", 
     EMAIL_ADDRESS = "[email protected]", 
     LAST_MODIFIED = DateTime.Now, 
     LOGIN_NAME ="operator.domain.com", 
     ItemIndex = Users.Count +1 

    }); 
} 

早些时候我使用

private List<User> _Users; 
public List<User> Users 
{ 
    get { return _Users; } 
    set { _Users = value; RaisePropertyChanged(()=> Users); } 
} 

Users = new List<User>(); 
for (int i = 1; i <= 10; i++) 
{ 
    Users.Add(new User() 
    { 
     ADDRESS_LINE_1 = "Test Address", 
     ADDRESS_LINE_2 = "Test Address 2", 
     FIRST_NAME = "Test Name " + i, 
     SURNAME = "Test surname " +i, 
     DATE_OF_BIRTH = DateTime.Now.Date, 
     GENDER = "M", 
     MOBILE_PHONE_NUMBER = "+9100000", 
     EMAIL_ADDRESS = "[email protected]", 
     LAST_MODIFIED = DateTime.Now, 
     LOGIN_NAME ="operator1.domain.com", 
     ItemIndex = Users.Count +1 
    }); 
} 

,我不断收到以下异常消息,当我尝试将它与xaml中的数据模板绑定时

Value does not fall within the expected range. 

堆栈跟踪为空:(

另外,如果我把另一个数组变量,并将这些值添加到它,然后分配该列表到我上面所列内容的浅表副本,代码给我想要的结果,但同样究竟绕来绕去。

这是DataTemplate中

<DataTemplate> 
      <Grid Margin="-8,-10,-8,-10" Background="{Binding ItemIndex, Converter={StaticResource AlternateRowBackgroundConverter}}"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*"></ColumnDefinition> 
        <ColumnDefinition Width="*"></ColumnDefinition> 
        <ColumnDefinition Width="*"></ColumnDefinition> 
        <ColumnDefinition Width="*"></ColumnDefinition> 
        <ColumnDefinition Width="*"></ColumnDefinition> 
        <ColumnDefinition Width="*"></ColumnDefinition> 
       </Grid.ColumnDefinitions> 
       <Border Grid.Column="0" Style="{StaticResource BorderStyleForAdmin}" Background="{Binding ItemIndex, Converter={StaticResource AlternateRowBackgroundConverter}}"> 
        <StackPanel Orientation="Horizontal"> 
         <!--<Border BorderBrush="Gray" BorderThickness="0.3" Visibility="{Binding IsSelectedItem, Mode=TwoWay, Converter={StaticResource ControlVisibiltyOfSelectedItemInListBox}}"> 
          <TextBlock Text="{StaticResource ArrowGlyph}" Foreground="Black" VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock> 
         </Border>--> 
         <TextBlock Style="{StaticResource TextBlockCell}" Text="{Binding SURNAME}"></TextBlock> 
        </StackPanel> 
       </Border> 
       <Border Grid.Column="1" Style="{StaticResource BorderStyleForAdmin}" Background="{Binding ItemIndex, Converter={StaticResource AlternateRowBackgroundConverter}}"> 
        <TextBlock Style="{StaticResource TextBlockCell}" Text="{Binding FIRST_NAME}"></TextBlock> 
       </Border> 
       <Border Grid.Column="2" Style="{StaticResource BorderStyleForAdmin}" Background="{Binding ItemIndex, Converter={StaticResource AlternateRowBackgroundConverter}}"> 
        <TextBlock Style="{StaticResource TextBlockCell}" HorizontalAlignment="Stretch"> 
         <Run Text="{Binding ADDRESS_LINE_1}"></Run><LineBreak></LineBreak> 
         <Run Text="{Binding ADDRESS_LINE_2}"></Run> 
        </TextBlock> 
       </Border> 
       <Border Grid.Column="3" Style="{StaticResource BorderStyleForAdmin}" Background="{Binding ItemIndex, Converter={StaticResource AlternateRowBackgroundConverter}}"> 
        <TextBlock Style="{StaticResource TextBlockCell}" Text="{Binding DATE_OF_BIRTH}"></TextBlock> 
       </Border> 
       <Border Grid.Column="4" Style="{StaticResource BorderStyleForAdmin}" Background="{Binding ItemIndex, Converter={StaticResource AlternateRowBackgroundConverter}}"> 
        <TextBlock Style="{StaticResource TextBlockCell}" Text="{Binding EMAIL_ADDRESS}"></TextBlock> 
       </Border> 
       <Border Grid.Column="5" Style="{StaticResource BorderStyleForAdmin}" Background="{Binding ItemIndex, Converter={StaticResource AlternateRowBackgroundConverter}}"> 
        <TextBlock Style="{StaticResource TextBlockCell}" Text="{Binding MOBILE_PHONE_NUMBER}"></TextBlock> 
       </Border> 
      </Grid> 
     </DataTemplate> 

虽然,观察到的集合为我工作,但我很奇怪,为什么清单给我这个例外,我无法找出什么是幕后的实际原因。提前致谢。

+0

你在哪里得到错误? – Ehsan

+0

将该集合绑定到我在xaml中的数据模板。 @卡尔·安德森 - MOBILE_PHONE_NUMBER是字符串 –

+4

你能写一个很小的项目,可以重现这个问题?我无法使用您的发布代码进行复制,只要绑定和模板被正确书写,它就可以与列表一起使用。 – kennyzx

回答

1

唯一让我感到困惑的是“RaisePropertyChanged”与ObservableCollection一起使用或至少您必须继承INotifyPropertyChanged接口。在你的第二个实现列表中没有得到“RaisePropertyChanged”方法。考虑列表声明为:

private List<User> _Users; 
public List<User> Users 
{ 
    get { return _Users; } 
    set { _Users = value;} 
} 

我认为这应该可以解决错误。但注意,这样做不会提高PropertyChanged事件每当要通知底层集合或容器的状态已经改变物体的变化(添加,删除,修改和)到点的状态。

欲了解更多信息:List vs ObservableCollection vs INotifyPropertyChanged in Silverlight

+0

thanku你的回应,但我使用mvvmlight,RaisePropertyChanged是INotifyPropertyChanged的genric实现,并在这两种情况下RaisePropertyChanged触发器但错误来绑定我认为。我使用了两种类型的集合,但从未得到过这样的错误。真正的问题是为什么它使用ObservableCollection而不是List。 –