我通过在视图模型中移动属性来解决这个问题,这样就不再存在“漏洞”设计,其中“子”视图想要控制“父”视图。
我查看了按类型显示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”中...我只是简单地重新更合理地考虑代码因此子项不会“泄漏”到“父”中。这显然更有意义。