将用户控件放在ItemsControl WPF中

时间:2018-08-23 12:10:04

标签: c# wpf data-binding

我有多次创建用户控件的情况。

<ItemsControl ItemsSource="{Binding ItmCollection, Mode=TwoWay}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <local:UserDefinedControl />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Grid local:GridHelpers.RowCount="{Binding RowCount,Mode=TwoWay}"
              local:GridHelpers.ColumnCount="{Binding ColumnCount, Mode=TwoWay}" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style>
            <Setter Property="Grid.Row" Value="{Binding Y_AXIS}" />
            <Setter Property="Grid.Column" Value="{Binding X_AXIS}" />
        </Style>
    </ItemsControl.ItemContainerStyle>
</ItemsControl>

通常userdefinedcontrol(用户控件名称)被创建10次,并占用15MB的内存。标签项中的itemscontrol和我有2个按钮,即第一个按钮用于创建UI ItmCollection(绑定ItemsSource),第二个按钮正在破坏ItmCollectionItemsSource绑定)。

现在,模型对象集合可以通过IDisposable正确地销毁,但是UI对象空间仍然相同,并且每次都会不断添加。如果我看到任务管理器,请继续增加内存空间。虽然我尝试使用析构函数和卸载事件,但对内存部分没有影响。基本上存在内存泄漏问题。

请帮助处置UI对象。

已回答的问题:

我找到了这个问题的根本原因之一。

因为我有用户控制权。在usercontrol内部,我有一个按钮,我绑定为

Tooltip =“ {Binding DataContext.ChildCollection [0] .ToolTipDesc,RelativeSource =” {RelativeSource AncestorType = {x:Type UserControl}}}“”

和按钮绑定对于我的情况是必需的。因此,第一次加载用户控件时会发生什么情况,那时子集合为空,而clr给我ArgumentOutOfRangeException。我尝试了不起作用的TargetNullValue和FallbackValue。所以我正在寻找替代方案。

0 个答案:

没有答案