我有一个WPF项目(c#,使用MVVM Light的MVVM),我有一个MultiBinding,可以将信息传递给转换器,正如您所期望的那样。
代码就在这里:
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Path Stroke = "{Binding LineColour}" >
< Path.Data >
< MultiBinding Converter="{StaticResource NodeToPathDataConverter}">
<Binding Path = "NodeListViewModel.NodeList" Source="{StaticResource Locator}" />
<Binding />
</MultiBinding>
</Path.Data>
</Path>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
转换器然后使用来自这些绑定的信息来吐出该行的详细信息。问题是该行从一个控件的(0,0)位置移动到另一个控件的位置,但我希望它从所讨论的控件的中间开始。为此,MultiBinding中的转换器需要获取相关控件的ActualWidth和ActualHeight。
那么有问题的控件是什么?我在这个下面有另一个几乎相同的ListBox控件,它使用相同的数据集,但不是在控件之间绘制线条,而是自己绘制控件。具体如下:
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Thumb Name = "myThumb" Template="{StaticResource NodeVisualTemplate}">
<i:Interaction.Triggers>
<i:EventTrigger EventName = "DragDelta" >
< cmd:EventToCommand Command = "{Binding NodeListViewModel.DragDeltaCommand, Source={StaticResource Locator}}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Thumb>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
我使用两个ListBox控件的原因是为了确保所有行都显示低于所有Thumb。我在同一个ListBox中尝试了很多方法,但它不会发生。它们确实共享相同的数据集,这是一个节点列表&#39;。
所以我无法弄清楚如何将第二个ListBox中Thumbs的ActualWidth和ActualHeight放入第一个ListBox中的转换器中。这就是为什么我在这里。
非常感谢任何帮助。
答案 0 :(得分:0)
您可以将第二个ActualWidth
中ActualHeight
的{{1}}和Thumb
只读属性“绑定”到您的某些ListView
源属性数据对象使用此处提到的任何解决方法:
Bind to ActualHeight of Item ItemsControl
然后,您可以绑定到第一个double
的{{1}}中的相同源属性。如果ItemTemplate
绑定到同一个源集合,这应该可以工作。
使用纯XAML无法直接绑定到第二个ListView
中的实际ListViews
元素。