【发布时间】:2010-12-08 09:41:50
【问题描述】:
我遇到了使用IEnumerable<Brush> 作为 ItemsSource 的 ComboBox 的问题;问题出在我(以编程方式)尝试设置 SelectedItem 时。这是描述问题的代码:
private readonly List<Brush> colors_;
private Brush white_;
ViewModelConstructor()
{
colors_ = (from p in brushes_type.GetProperties()
select (Brush)converter.ConvertFromString(p.Name)).ToList();
white_ = colors_.Single(b => b.ToString() == "#FFFFFFFF");
}
public IEnumerable<Brush> Colors
{
get { return colors_; }
}
public Brush White
{
get { return white_; }
set
{
if (white_ != value)
white_ = value;
}
}
这里是 xaml 代码:
<ComboBox ItemsSource="{Binding Path=Colors}"
SelectedItem="{Binding Path=White}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Border BorderThickness="1"
BorderBrush="Black"
Width="20"
Height="12"
SnapsToDevicePixels="True"
Margin="0,0,4,0">
<Border Background="{Binding}"/>
</Border>
<TextBlock Text="{Binding}"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
在调用 White 属性的 get 后,我得到一个异常:无法在对象“#FFFFFFFF”上设置属性,因为它处于只读状态。如果我将 White (white_) 保留为 null,则一切正常。
【问题讨论】:
-
能看到异常的调用栈吗?
-
我已将调用堆栈上传至 vladeck.wordpress.com/files/2009/10/callstack.doc。只需将 DOC 重命名为 TXT(wordpress 限制)。
标签: c# wpf exception mvvm combobox