Silverlight列表框:绑定不会得到更新

3
我有一个向导控件,其中包含多个步骤。不可见的控件将从可视树中移除。我在一页上有一个 ListBox,它绑定到一个 ObservableCollection<T>。当在该 ListBox 上添加或删除项目时,另一页上的 ListBox (具有相同的 ItemsSource) 的绑定不会更新。我希望这足够清楚地解释了我的问题。
页面再次添加到可视树时,如何使此绑定更新?

你是如何向那个列表框中添加或移除项目的? - NestorArturo
每一页代表一个步骤? - NestorArturo
每个页面都代表一个步骤,是的。我不直接添加和删除列表框中的内容,而是添加到ObservableCollection<T>中。 - Bas
让我来澄清一下:您有两个(或更多)列表框,它们不会同时显示,但都使用相同的ObservableCollection进行填充。当其中任何一个不可见时,您会完全将其从可视树中删除,但是您会在某个地方保留引用,对吗?当其中一个需要可见时,您会将其重新添加到可视树中,并且您会发现之前的更改未被填充。我说得对吗? - NestorArturo
想看看您是如何将Listboxes从可视树中添加和删除的。 - NestorArturo
显示剩余2条评论
1个回答

1

我无法复现您的问题。我能够从可视树中移除一个ListBox,向ObservableCollection添加对象,并在将其添加到可视树时实际更新项。

尝试通过将可见性设置为Collapsed而不是从可视树中移除来解决您的问题。

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();

        this.listBox1.ItemsSource = o;
        this.listBox2.ItemsSource = o;
    }

    ObservableCollection<int> o = new ObservableCollection<int>();
    private void buttonList1_Click(object sender, RoutedEventArgs e)
    {
        if (this.listBox1.Parent == null)
            this.LayoutRoot.Children.Add(this.listBox1);
        else
            this.LayoutRoot.Children.Remove(this.listBox1);

        //this.listBox1.Visibility = this.listBox1.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
    }

    private void buttonList2_Click(object sender, RoutedEventArgs e)
    {
        if (this.listBox2.Parent == null)
            this.LayoutRoot.Children.Add(this.listBox2);
        else
            this.LayoutRoot.Children.Remove(this.listBox2);

        //this.listBox2.Visibility = this.listBox2.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
    }

    private void ButtonAddMore_Click(object sender, RoutedEventArgs e)
    {
        o.Add(o.Count);
    }

}

尝试在将对象添加到可视化树之外、然后再将其删除并重新添加时,您会看到奇怪的行为。此外,使用ContentControl.Content设置应该在LayoutRoot中的项。 - Bas

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