私はリストボックスに基づいて "FileSelector"と呼ばれるユーザーコントロールを作成しています。リストボックスには、ダイアログから選択されたファイル名を含むobservablecollection "FileDisplay"が埋め込まれています。項目に含まれているトグルボタンがチェックされているobservablecollection型の依存型プロパティが例外をスローする
<ListBox x:Name="FileListBox" Template="{DynamicResource BaseListBoxControlStyle}" Grid.RowSpan="5" Grid.Row="1" Margin="0" ItemContainerStyle="{DynamicResource BaseListBoxItemStyle}" ItemsSource="{Binding DataContext.FileDisplay, ElementName=F_Selector, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<DockPanel>
<Button x:Name="ListDelete" Width="{Binding ActualHeight, ElementName=ListDelete}" Style="{DynamicResource BaseButtonStyle}" Margin="4,0,0,0" DockPanel.Dock="Right" Content="X" Click="FileDelete_Click"/>
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
<ToggleButton x:Name="ListCheck" Width="{Binding ActualHeight, ElementName=ListCheck}" Style="{DynamicResource BaseToggleButtonStyle}" Margin="0,0,4,0" Checked="File_Checked" Unchecked="File_Unchecked" />
<TextBlock Text="{Binding ., Converter={StaticResource PathToFileName}}" TextTrimming="CharacterEllipsis"/>
</StackPanel>
</DockPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
、私は型のObservableCollectionのDependencyPropertyに項目の内容を追加したいです。
private void File_Checked(object sender, RoutedEventArgs e)
{
ToggleButton btn = (ToggleButton)sender;
int index = FileListBox.Items.IndexOf(btn.DataContext);
FileChecked[index] = true;
FileSelected.Add(FileDisplay[index]);
}
たDependencyProperty:
public static readonly DependencyProperty FileSelectedProperty =
DependencyProperty.Register("FileSelected", typeof(ObservableCollection<string>), typeof(FileSelector));
[Bindable(true)]
public ObservableCollection<string> FileSelected
{
get { return (ObservableCollection<string>)this.GetValue(FileSelectedProperty); }
set { this.SetValue(FileSelectedProperty, value); }
}
はまた、FileCheckedは要素が後で使用するためにチェックしたりされていないの追跡を維持するためのObservableCollectionです。
すべて罰金コンパイルが、私はトグルボタンのいずれかをチェックするときにこのエラーがスローされます。
Access violation at address 00007FFA2981CC85. Read of address 0000000000000000.
それは私が簡単なのObservableCollectionにしたDependencyProperty FileSelectedを変更した場合、問題がないことは注目に値するが、私私は後でそれを縛ることができないので、それをしたくありません。
理由は何ですか?ありがとうございました
EDIT ---- visualstudioデバッガでもう少しテストした後、トグルボタンをクリックするたびに "FileSelected"という名前の依存プロパティがnullになり、 "FileDisplay [index]"を追加する必要がありますどのような文字列でも最新のものに置き換えても...