从wpf中的xaml访问另一个类中的类实例

时间:2014-08-01 03:04:08

标签: c# wpf xaml mvvm binding

我的班级看起来像这样:

public class testclass
{
    public List<otherClass> references { get { return _references; } }
}

我的otherClass看起来像这样

public class otherClass
{
    public string name { get; set; }
}

现在我尝试访问这个&#34; otherClass&#34;在DataTemplate中

<DataTemplate x:Key="templateCore" DataType="{x:Type vm:AdminInterfaceViewModel}" >
    <GroupBox DataContext="{Binding references }">
        ...
</DataTemplate>

这个工作正常,或者我认为至少,beaucse intellisense自动完成它。但是现在我怎样才能访问&#34; otherClass&#34;的名称属性? ?

1 个答案:

答案 0 :(得分:2)

您只需要将List绑定到ItemsControl类型,例如ListBox,DataGrid等,而ItemsControl将使用&#39; otherClass&#39;列表中的实例作为其中每个项目的DataContext。因此,您可以找到一个&#39;映射&#39;有:

 'List<otherClass>'--'ItemsControl'

 'otherClass'--'Item'

我认为&#39; AdminInterfaceViewModel&#39;是你的DataContext,以及&#39;引用&#39;是它的一个属性,所以试试这个:

<DataTemplate x:Key="templateCore" DataType="{x:Type vm:AdminInterfaceViewModel}" >
    <GroupBox>
      <ListBox ItemsSource="{Binding references}">
        <ListBox.ItemTemplate>
          <DataTemplate>
            <TexBox Text="{Binding name}"/>
          </DataTemplate>
        </ListBox.ItemTemplate>
      </ListBox>
    </GroupBox>
</DataTemplate>

<强>&GT;更新

1.假设您有一个MainViewModel,其中包含一个名为MyViewModel的属性,其类型为&#39; AdminInterfaceViewModel&#39;。

class MainViewModel
{
   public AdminInterfaceViewModel MyViewModel  {get; set;}
}

2.您已经设置了&#39; MainViewModel&#39;作为Window的DataContext,您可以使用属性&#39; MyViewModel&#39;在xaml。

 <Window>
   <Grid>
      <ContentControl Margin="20" Content="{Binding MyViewModel}">

      </ContentControl>
    </Grid>
 </Window>

3.在ResourceDictionary中定义DataTemplate,例如&#39; generic.xaml&#39;。删除x:Key,然后DataTemplate将自动应用于每个&#39; AdminInterfaceViewModel&#39;类型实例。

<DataTemplate x:Key="templateCore" DataType="{x:Type vm:AdminInterfaceViewModel}" >
    <GroupBox>
      <ListBox ItemsSource="{Binding references}">
        <ListBox.ItemTemplate>
          <DataTemplate>
            <TexBox Text="{Binding name}"/>
          </DataTemplate>
        </ListBox.ItemTemplate>
      </ListBox>
    </GroupBox>
</DataTemplate>

&GT;的提示

点击此链接,它可以解决您的潜在问题:MVVM pattern