C# 跟踪自动高度行';虚拟机中的实际高度

C# 跟踪自动高度行';虚拟机中的实际高度,c#,wpf,mvvm,itemscontrol,C#,Wpf,Mvvm,Itemscontrol,抱歉,如果下面的任何代码格式不正确。我在手机上发布了它,因为我的wifi目前有问题 我希望能够做出这样的事情(我知道这样做是不可能的): 。。。 ... 因此,高度基本上是自动的(因为其中可能的项目数(例如标签)为0-n-使用ItemsControl表示法),但我需要知道项目控件的确切高度(在本例中,它是行)以计算表示数据所需的“页数”。就像ms word中的页面一样 但是,命名行(row.ActualHeight)是不可能的,因为VM/MVVM通常不应该这样做(反正我没有直接访问视图的权限)

抱歉,如果下面的任何代码格式不正确。我在手机上发布了它,因为我的wifi目前有问题

我希望能够做出这样的事情(我知道这样做是不可能的):

。。。
...
因此,高度基本上是自动的(因为其中可能的项目数(例如标签)为0-n-使用ItemsControl表示法),但我需要知道项目控件的确切高度(在本例中,它是行)以计算表示数据所需的“页数”。就像ms word中的页面一样

但是,命名行(row.ActualHeight)是不可能的,因为VM/MVVM通常不应该这样做(反正我没有直接访问视图的权限)


知道怎么做吗?谢谢。

这是我的,而且似乎很管用。此外,我还复制了post中的
SizeObserver


因为
ItemsControl
是行1中的唯一元素,所以我们知道行定义或行的高度将是行内控件的实际高度--
ItemsControl

嗨,斯凯普,我会先研究一会儿,然后尽快接受。谢谢。嗨,scape,我可以找到哪个程序集/引用
AssertNotNull
?在任何地方都找不到,或者我在谷歌上搜索错了。谢谢。@MosesAprico我想这是来自测试框架。请在此处阅读更多:。您可以对代码进行注释,它应该可以正常工作。注意:到目前为止,它可以正常工作,但我还不能在实际环境中测试它。谢谢:)
...
<RowDefinition Height="Auto" ActualHeight="{Binding RowHeight, Mode="OneWayToSource"}"/>
...
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <TextBlock Text="This is row 1" Grid.Row="0"></TextBlock>
    <ItemsControl Grid.Row="1" 
                  vm:SizeObserver.Observe="True" 
                  vm:SizeObserver.ObservedHeight="{Binding ActHeight, Mode=OneWayToSource}">
        <TextBlock Text="1"></TextBlock>
        <TextBlock Text="2"></TextBlock>
        <TextBlock Text="3"></TextBlock>
        <TextBlock Text="4"></TextBlock>
        <TextBlock Text="5"></TextBlock>
        <TextBlock Text="6"></TextBlock>
    </ItemsControl>
    <TextBlock Text="This is row 3"
               Grid.Row="2"></TextBlock>
</Grid>
public double ActHeight
{
    get
    {
        return _height;
    }
    set
    {
        _height = value;
    }
}