StackPanel.Children.Clear()无法正常工作。

3

在删除我的StackPanel的子元素时,我遇到了一个问题。

开始时我的StackPanel是空的。我调用一个方法在其中添加了11个TextBox。在再次调用该方法之前,我想先删除这11个TextBox。因此,我调用了我的StackPanel:

myStackPanel.Children.Clear()

它正在工作(尝试使用调试点和计数)。在StackPanel中没有子元素,但是该方法在第二次调用后返回了22个TextBox

请问有什么问题吗?

XAML:

<StackPanel x:Name="myStackPanel"/>

WPF :

var count1 = myStackPanel.Children.Count; // 11 (first call give me 11)
myStackPanel.Children.Clear();
var count2 = myStackPanel.Children.Count; // 0 (it is working)
using (var selectAll = new Database1Entities())
{
    var querySelectAll =
        from myVariable
        in selectAll.Entrees
        select myVariable;
    foreach (var ligne in querySelectAll) // 11 (0 + 11 = 11 right ?)
    {
        TextBox myTextBoxNom = new TextBox();
        myTextBoxNom.Text = ligne.Nom;
        myStackPanel.Children.Add(myTextBoxNom);
    }
}
var count3 = myStackPanel.Children.Count; // EDIT >> 11 (but 22 on screen)

编辑:: 适用于评论中的提示


2
除了你不应该这样做的部分,你看到的行为确实很奇怪。 - BradleyDotNET
1
我同意BradleyDotNET的观点。你考虑过使用DataBinding绑定到ViewModel吗? - SuperOli
2
ItemsControl,我可能没有测试就说错了,但这似乎是通过使用强引用链订阅ValueChanged事件来跟踪您的children.count的潜在内存泄漏。 - Chris W.
1
如果你继续像使用Windows Forms一样编写WPF程序,那么你将会面临很大的困难...使用MVVM并发挥WPF的优势。 - nvoigt
有时候在家里只依靠谷歌资源学习是很困难的。 - C0ZEN
显示剩余7条评论
1个回答

0

我从未找到这个错误的解决方案,但是我使用了DataBinding来避免它,就像你可以在评论中读到的那样。


请告诉我,解决方案是什么?如果谷歌把某人带到这里,他们会发现没有答案。这会让他们很难过。那个勾号是一个谎言。 - Gusdor
遗憾的是,我从未找到解决方案......我只是另寻他路来完成它。 - C0ZEN
你会说这是一个应该标记为“已回答”状态的问题吗?我不这么认为。请分享解决方法。 - Gusdor
是的,我该如何给出这个状态? - C0ZEN
这个问题是9个月前提出的。我只能告诉你,我找到了另一种方法来完成我的工作,但我的项目已经很久以前结束了,说实话我没有源代码(硬盘重置)。 - C0ZEN
绿色勾号并不代表“已解决” - 它不是一个“关闭”标志,而是一个“已回答”标志。由于没有可查看的答案,这个问题并没有得到回答,因此不应该有勾号。这个问题是社区资源,可以被成千上万的程序员浏览!如果您没有提供答案,请删除此回答。 - Gusdor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接