我正在使用XAML中定义的静态对象数组作为列表框中的ItemsSource。
我用:
ItemsSource="{Binding Source={StaticResource theSource}}".
这在设计时非常有用。但是,我需要在运行时覆盖它,因此列表框将从我的视图模型上的集合属性中获取它的项目。我公开了一个名为“theSource”的属性,并在后面的代码中设置Window DataContext。但是,列表仍然绑定到静态资源...而不是我视图模型上的属性。
有关正确设置时间数据以便在运行时可视化UI并替换实时数据的建议吗?
答案 0 :(得分:0)
只需命名列表框控件
即可<ListBox x:Name="myListBox"
ItemsSource="{Binding Source={StaticResource theSource}}" />
并在运行时更改
myListBox.ItemsSource = datasource;
第二个解决这个问题:
What's the difference between StaticResource and DynamicResource in WPF?
如果您正在使用WPF,那么您可以使用DynamicResource
代替,并在运行时更改此定义
但是Silverlight会失败,因为这个较轻的框架不支持动态资源。
第三次
由于您想对控制器对象使用绑定,因此:
<Page xmlns="http://..." xmlns:your="...">
<Page.DataContext>
<your:DesignTimeObject> <!-- Must be of the same type as in runtime, or at least expose properties and subproperties with the same name -->
<your:DesignTimeObject.List>
<your:Element id="1" />
<your:Element id="2" />
<!-- snip -->
<your:DesignTimeObject.List>
</your:DesignTimeObject>
</Page.DataContext>
<ListBox x:Name="myListBox" ItemsSource="{Binding List}" /> <!-- Binds to the Element list with id="1" , id="2" ... -->
</Page>
通过这种方式,您不必在运行时更改绑定,设置DataContext一次并完成它。