これは私の作業コードです。
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 = "Test@email.com",
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 = "Test@email.com",
LAST_MODIFIED = DateTime.Now,
LOGIN_NAME ="operator1.domain.com",
ItemIndex = Users.Count +1
});
}
xamlでデータテンプレートにバインドしようとすると、次の例外メッセージが継続的に表示されます
Value does not fall within the expected range.
スタック トレースが null です :(
さらに、別のリスト変数を取得してそれらの値を追加し、そのリストの浅いコピーを上記のリストに割り当てると、コードは望ましい結果をもたらしますが、実際には何が起こっているのでしょうか。
これはデータテンプレートです
<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>
ただし、Observable コレクションは機能しますが、なぜ List がこの例外を与えているのか疑問に思っています。舞台裏の実際の理由を理解できません。前もって感謝します。