Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data binding Silverlight Listbox:绑定未更新_Data Binding_Silverlight 4.0_Observablecollection - Fatal编程技术网

Data binding Silverlight Listbox:绑定未更新

Data binding Silverlight Listbox:绑定未更新,data-binding,silverlight-4.0,observablecollection,Data Binding,Silverlight 4.0,Observablecollection,我有一个包含多个步骤的向导控件。不可见的控件将从可视树中删除。我在一个页面上有一个列表框,它绑定到一个可观察集合。当项目添加或删除到一个页面上的列表框、另一个页面上的列表框(使用相同的项目资源)时,另一个页面上的绑定不会得到更新。我希望这能足够清楚地解释我的问题 当页面再次添加到可视化树中时,如何更新此绑定?我无法重现您的问题。我能够从可视化树中删除一个列表框,将对象添加到ObservableCollection,当我将其添加到可视化树中时,项目实际上会更新 尝试通过将可见性设置为“已折叠”,而

我有一个包含多个步骤的向导控件。不可见的控件将从可视树中删除。我在一个页面上有一个
列表框
,它绑定到一个
可观察集合
。当项目添加或删除到一个页面上的
列表框
、另一个页面上的
列表框
(使用相同的
项目资源
)时,另一个页面上的绑定不会得到更新。我希望这能足够清楚地解释我的问题


当页面再次添加到可视化树中时,如何更新此绑定?

我无法重现您的问题。我能够从可视化树中删除一个列表框,将对象添加到ObservableCollection,当我将其添加到可视化树中时,项目实际上会更新

尝试通过将可见性设置为“已折叠”,而不是从可视树中删除来解决问题

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);
    }

}
public部分类主页面:UserControl
{
公共主页()
{
初始化组件();
this.listBox1.ItemsSource=o;
this.listBox2.ItemsSource=o;
}
ObservableCollection o=新的ObservableCollection();
私有无效按钮列表1\u单击(对象发送者,路由目标)
{
if(this.listBox1.Parent==null)
this.LayoutRoot.Children.Add(this.listBox1);
其他的
this.LayoutRoot.Children.Remove(this.listBox1);
//this.listBox1.Visibility=this.listBox1.Visibility==Visibility.Visibility?Visibility.collazed:Visibility.Visibility;
}
私有无效按钮列表2\u单击(对象发送者,路由目标)
{
if(this.listBox2.Parent==null)
this.LayoutRoot.Children.Add(this.listBox2);
其他的
this.LayoutRoot.Children.Remove(this.listBox2);
//this.listBox2.Visibility=this.listBox2.Visibility==Visibility.Visibility?Visibility.collazed:Visibility.Visibility;
}
私有无效按钮更多单击(对象发送者,路由目标e)
{
o、 加(o.Count);
}
}

如何向该列表框添加或删除项目?每页代表一个步骤?每页代表一个步骤,是的。我不是直接添加和删除列表框,而是添加到ObservableCollection让我直截了当地说:您有两个(或更多)同时不可见的列表框,booth使用相同的ObservableCollection馈送。当其中任何一个不可见时,您会将其从可视树中完全删除?但您会将引用保留在某个位置,对吗?当其中一个需要可见时,您将其重新添加到可视化树中,您会看到以前的更改没有填充。我说的对吗?是的@NestorArturo,当项目被移除然后添加时,它们会被添加两次。清除列表是可行的,但再次添加项目将添加两次或三次,具体取决于重复的次数。请尝试添加对象,然后删除该对象并在项目不在可视化树中时再次添加,您将看到奇怪的行为。此外,使用ContentControl.Content设置应该在layoutroot中的项。