我的Silverlight应用程序和MVVM模式的使用有点问题。
在我的视图中,我有一个DataGrid。 ItemsSource通常会绑定到ViewModel,但在我的特定情况下,我需要列是动态的,我的items集合包含每个项目的Dictionary,所以我没有要显示的类属性。我的解决方案是在代码隐藏中生成所有这些,因为DataGrid的实际设计与我的ViewModel无关。这是我能想到的唯一解决方案,因为列无法数据绑定。
我已经完成了所有这些工作。我的问题是我正在使用RIA,并且视图不知道项目集合何时完成加载。我通过在视图上放置一个普通按钮来触发代码隐藏功能来尝试我的设计,但显然这个解决方案并不好。我的项目集合加载完成后,我需要运行codebehind函数。
我可以让我的代码隐藏听取ViewModel吗?
答案 0 :(得分:1)
我有一种感觉,你在某处乱搞东西。
对于您的问题,我认为您可以通过在ViewModel中设置一个事件来解决它。 在视图的view_Loaded事件中订阅该事件,并在处理程序中调用codebehind函数。
我建议你重新检查你的设计,看看这是否真的有必要。
答案 1 :(得分:0)
我理解你的意思,我们曾经不得不做同样的事情,生成随机列,这是Silverlight中的PIA,因为你需要某种具有动态属性集的对象。
我看到你找到了词典解决方案。我建议,这不是最简洁的解决方案,但它更清洁,然后把代码放在后面的代码,是在转换器中添加它。然后将集合绑定到itemscontrol的itemssource,然后当列表propertychanged引发时,在转换器中组装datagrid。
小例子:
<ItemsControl Grid.Row="1" ItemsSource="{Binding theListOfEntities, Converter={StaticResource theconverter}}"/>