发布网友 发布时间:2022-04-22 06:11
共1个回答
热心网友 时间:2024-03-08 08:11
如果你把第二个数组换成一个实现了INotifyCollectionChanged接口的集合,比如ObservableCollection<T>(XAML里面没法写泛型,你可以直接写个非泛型的集合继承自这个集合来测试),应该就发现第二个变了
仔细想想为啥?
其实第一个SolidColorBrush的Color属性是一个DependencyProperty,你通过Resources["brush"]拿到那个资源的引用,改变了一个属性,而这个属性的变化会引起Brush的重新渲染,导致界面变化;
而第二个是一个普通的Array,你改变了其中的一项,却无法通知到ListBox,自然是不会变化的
示例代码:
<Window.Resources>
<l:DataCollection x:Key="Array">
<sys:String>AAA</sys:String>
<sys:String>BBB</sys:String>
<sys:String>CCC</sys:String>
</l:DataCollection>
</Window.Resources>
<DockPanel>
<Button DockPanel.Dock="Top" Content="Change" Click="Button_Click" />
<ListBox ItemsSource="{DynamicResource Array}"/>
</DockPanel>
public class DataCollection : ObservableCollection<string>
{
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var col = (DataCollection)Resources["Array"];
col[0] = "123";
}