我正在制作一个基于列表框的名为“FileSelector”的用户控件。列表框中填充了一个observablecollection“FileDisplay”,其中包含从对话框中选择的文件名。
<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,用于跟踪检查哪个元素以供以后使用。
所有编译都很好但是当我检查其中一个togglebutton时会抛出这个错误:
Access violation at address 00007FFA2981CC85. Read of address 0000000000000000.
值得注意的是,如果我将DependencyProperty FileSelected更改为一个简单的observablecollection,则没有问题,但我不想这样做,因为我以后无法绑定它。
知道为什么吗?谢谢
EDIT ---- 在使用visualstudio调试器进行了一些测试之后,我发现每当我点击一个togglebutton时,名为“FileSelected”的dependencyproperty为null,而它应该添加“FileDisplay [index]”,即使我用任何类型的字符串替换最新的。 ..
答案 0 :(得分:0)
我有点困惑。你这样说:
值得注意的是,如果我将DependencyProperty FileSelected更改为一个简单的observablecollection,没有问题,但我不想这样做,因为我以后无法绑定它。
但在您的示例中,FileSelected
是一个ObservableCollection。 FileSelected
最初打算采用什么数据类型?
在使用visualstudio调试器进行了一些测试后,我发现每当我点击一个togglebutton时,依赖属性名为&#34; FileSelected&#34;是null,而它应该被添加&#34; FileDisplay [index]&#34;即使我用任何一种字符串替换最新的......
在不知道其真实数据类型的情况下,没有办法告诉为什么FileSelected
为空。是一次只选择一个文件还是多个文件?
如果FileSelected
假设是OC,它可能是空的,因为你没有在任何地方初始化它,或者b)你没有&#39; t正确初始化。
您可以发布初始化样本吗?