我可以在一个数据模板中引用另一个元素吗?

时间:2016-10-06 23:34:01

标签: .net wpf xaml

我通过在视图模型中移动属性来解决这个问题,这样就不再存在“漏洞”设计,其中“子”视图想要控制“父”视图。

我查看了按类型显示datatemplates的模型对象。

然后,对象具有也按类型显示到datatemplates中的属性。 E.G:

public class ItemViewModel
{
    public ItemProperty1 { get; }
    public ItemProperty2 { get; }
    public bool LayoutBothItems { get; }
}

public class ItemProperty
{
    public double Value { get; }
    public bool IsValueInteresting { get; }
}

public class SpecializedItemProperty : ItemProperty {}

然后在XAML中有三个数据表:

<!-- Enclosing DataTemplate inflates the DataGridCell itself: -->
<DataTemplate DataType="{x:Type viewModel:ItemViewModel}">
    <Grid x:Name="viewModelGrid">
        <ContentPresenter Content="{Binding ItemProperty, Mode=OneWay}"/>
    </Grid>
    <!-- Here there are some Triggers that adjust the Grid based on <LayoutBothItems> -->
</DataTemplate>

<!-- DataTemplate inflates the Cell's properties: -->
<DataTemplate DataType="{x:Type viewModel:ItemProperty}">
    <TextBlock Text="{Binding Value, Mode=OneWay}"/>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding IsValueInteresting, Mode=OneWay}" Value="True">
            <!--
                HERE:
            -->
            <Setter TargetName="viewModelGrid" Property="Background" Value="Red"/>
        </DataTrigger?
    </DataTemplate.Triggers>
</DataTemplate>

<DataTemplate DataType="{x:Type viewModel:ItemProperty}">
    <!-- A different display for the specialized item ... -->

在ItemProperty的虚增模板中,我试图想要从膨胀它的父母那里引用网格......

重点是:“ItemViewModel”是DataGrid ItemsSource集合中的一个项目。每个特定项目---一个Cell ---可以有一定的特定“ItemProperty”类型。 ItemViewModel的“viewModelGrid”针对特定的Cell布局动态调整,以排列每个ItemProperty。因此,DataGrid中的每个Cell都会将ItemPropertys扩展为一些每单元格布局。

因此,ItemProperty数据模板旨在为特定类型进行膨胀 - 它们就像DataGridCell中的“子单元”......

一个ItemViewModel USED希望根据某些属性设置背景颜色,而在视觉Z-Order中,我想要做的地方是在封闭的“viewModelGrid”中...我只是简单地重新更合理地考虑代码因此子项不会“泄漏”到“父”中。这显然更有意义。

0 个答案:

没有答案