0

私はリストボックスに基づいて "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]"を追加する必要がありますどのような文字列でも最新のものに置き換えても...

答えて

0

私はちょっと混乱しています。あなたはこれを言う:

それは私が簡単なのObservableCollectionにしたDependencyProperty FileSelectedを変更した場合、問題はありませんが、私は後でそれをバインドできませんでしたように私はそれを行うにはしたくないことは注目に値します。

サンプルでは、​​FileSelectedはObservableCollectionです。 FileSelectedは元々はどんなデータ型ですか?

VisualStudioのデバッガといくつかのより多くのテストの後、私はトグルボタンをクリックしたときに、私が最新のを交換しても、「FileDisplay [インデックス]」を追加する必要がある一方で、「FileSelected」という名前のDependencyPropertyは、nullであることがわかりましたどんな種類の文字列でも入力できます...

FileSelectedが実際のデータ型を知らずにnullになった理由を示す方法はありません。一度に複数のファイルが選択されていますか?

FileSelectedがであると仮定すると、a)どこにも初期化していないか、またはb)正しく初期化していないため、おそらくnullです。

初期化のサンプルを投稿できますか?

関連する問題