将ActualWidth和ActualHeight传递给MultiBinding

时间:2017-07-04 19:00:58

标签: c# wpf mvvm listbox

我有一个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中的转换器中。这就是为什么我在这里。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以将第二个ActualWidthActualHeight的{​​{1}}和Thumb只读属性“绑定”到您的某些ListView源属性数据对象使用此处提到的任何解决方法:

Bind to ActualHeight of Item ItemsControl

然后,您可以绑定到第一个double的{​​{1}}中的相同源属性。如果ItemTemplate绑定到同一个源集合,这应该可以工作。

使用纯XAML无法直接绑定到第二个ListView中的实际ListViews元素。