如何使用mvvm绑定网格以在其上呈现UI元素

时间:2014-09-03 12:23:08

标签: c# .net xaml silverlight mvvm

我是一名c#Silverlight初学者,我使用的是Silverlight5和MVVM方法。

我该怎么办? 我创建了一个xaml,假设:

<UserControl x:Class="DEV_CENTER.TabControlStuff.UIeLementRender"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">

     </Grid>
</UserControl>

现在我想将此网格绑定到一个viewModel类,该类将在其上呈现包含组合框的网格。怎么做?

我尝试通过像这样更改网格来添加"{Binding UIElements}"

 <Grid x:Name="LayoutRoot" Background="White" {Binding UIElements}>

当然不支持。

那么如何使用MVVm方法绑定此网格以在其上呈现UIElemnts(组合框)?

编辑:情况是我有一个网格已经包含一个Combobox(使用c#代码动态获得)和我希望在网格上渲染的网格(此网格是在创建时获得的默认网格xaml)(通过使用MVVM进行绑定,我必须通过像{Binding AlreadComboContainingGrig}这样的方式使用MVVM将它绑定到这个xaml degault创建的网格来渲染先前获得的网格(使用c#,包含组合框)。

而我绑定的ViewModel类将如下所示:

 public class uiElementRendererViewModel : GenericViewModel
    {

        private Grid alreadComboContainingGrig;
        public Grid AlreadComboContainingGrig
        {
            get { return alreadComboContainingGrig; }
            set { alreadComboContainingGrig= value; OnPropertyChanged("AlreadComboContainingGrig"); }
        }
    }

有可能吗?如果没有,那么请你告诉我任何替代方案吗?谢谢。

1 个答案:

答案 0 :(得分:1)

可能最好的方法是在外部网格中使用容器元素,例如ContentController或Frame作为占位符,并将其内容绑定到内部网格。 在XAML中有类似的东西:

<Grid Name="GlobalGrid">
   <ContentControl Name="ComboGridPlaceholder" Content = "{Binding alreadComboContainingGrig}"/>
</Grid>

唯一剩下的就是不要忘记为ComboGridPlaceholder设置正确的DataContext。