带有Viewmodels的Xaml动态网格

时间:2011-01-22 07:24:01

标签: xaml viewmodel

您好我正在尝试在xmal中创建一个通过ViewModel填充的网格。 网格是一个5x5网格,我的ViewModel包含一个“MyObject”列表。该对象包含2个int变量Row和Column表示Object应该在网格中的位置。 MyObject也是一个视图模型,网格空间应填充数据模板名称MyTemplate,MyObject作为DataContext。 现在我对xaml和视图模型都很陌生,但是最好的方法是什么呢?

1 个答案:

答案 0 :(得分:1)

让我们看看...
将ObservableCollection放入VM,然后......

选项1:
...一个简单的Grid进入V.从xaml.cs订阅它的CollectionChanged事件,为每个添加的对象添加ContentControls到网格,将ContentControl的Grid.Row和Grid.Column属性绑定到每个对象的属性,并将DataContext设置为对象本身和ContentTemplate到Resources [“MyTemplate”]。 (另外,对于任何删除的对象,找到相应的ContentControl并将其删除。)
亲:容易
Con:.cs,没有设计师支持

选项2:
...将ItemsControl转换为V.将其ItemPanelTemplate设置为Grid,并将ObservableCollection绑定到其ItemsSource。然后将Itemtemplate设置为MyTemplate。现在,诀窍是根据您的值将项目放入正确的单元格中。为此,使用ItemsControl的ItemContainerStyle属性,并将容器的Grid.Row和Column绑定到这些属性。
亲:很好的xaml,很容易延长
Con:ItemContainerStyle在WPF中很棘手,在Silverlight中丢失,所以如果是后者,你可以忘记它

选项3:
...你写的自定义面板。或许从Grid继承它。如果将一个元素放入其中,请检查它的DataContext是否实现了包含您的属性的接口。然后将其用作选项2中的ItemsPanel ...
亲:它应该完美地工作 Con:你必须为此写一个新的面板......

希望这3个中的一个对你好。

相关问题