关于WPF动态、静态资源扩展和Freeazable的关系 资...

发布网友 发布时间: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";

        }

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com