【问题标题】:update listbox text values dynamically动态更新列表框文本值
【发布时间】:2015-10-27 06:20:21
【问题描述】:

我找到了在列表框中添加或删除项目的方法,它利用了 Observable Collection。但我想更新列表框中的所有特定绑定属性值,例如仅在列表框中更新的所有文本块。这是在列表框中添加项目的示例,但我想更新值:在列表框外单击按钮上的绑定名称,那么我该如何实现?

public partial class MainPage : PhoneApplicationPage
{
    // Constructor
    public MainPage()
    {
        InitializeComponent();
        FillListBox();
    }
    MovieList Mov = new MovieList();
    private void FillListBox()
    {
        listBox1.ItemsSource = Mov;
        listBox1.DisplayMemberPath = "Name";
        listBox1.SelectionChanged += new SelectionChangedEventHandler(listBox1_SelectionChanged);
    }
    void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        Mov.Add(new Movie { Name = "Ghillli", Actor = "Vijay" });
    }
}
public class Movie
{
    public string Actor { get; set; }
    public string Name { get; set; }
}
public class MovieList : ObservableCollection
{
    public MovieList()
    {
        Add(new Movie { Name = "Kaavalan", Actor = "Vijay", });
        Add(new Movie { Name = "Velayutham", Actor = "Vijay", });
        Add(new Movie { Name = "7th Sense", Actor = "Surya", });
        Add(new Movie { Name = "Billa 2", Actor = "Ajith Kumar", });
        Add(new Movie { Name = "Nanban", Actor = "Vijay", });
    }
}

那么如何更新列表框中所有绑定 Name 属性的值而不使 itemsource 为空并重新绑定所有值并且只更新 Name 属性?

【问题讨论】:

    标签: c# windows-phone-8 listbox observablecollection


    【解决方案1】:

    修改代码如下:

    public class Movie
    {
        public string Actor { get; set; }
        public string Name { get; set; }
    }
    public class MovieList : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
        {
            var mevent = PropertyChanged;
            if (mevent != null)
            {
                mevent(this, e);
            }
        }
    
        ObservableCollection<Movie> Movieitems = new ObservableCollection<Movie>();
        public ObservableCollection<Movie> MovieItems
        {
            get { return Movieitems; }
            set
            {
                if (Movieitems == value)
                {
                    return;
                }
                Movieitems = value;
                OnPropertyChanged(new PropertyChangedEventArgs("MovieItems"));
            }
        }
    
        public MovieList()
        {
            Movieitems.Add(new Movie { Name = "Kaavalan", Actor = "Vijay", });
            Movieitems.Add(new Movie { Name = "Velayutham", Actor = "Vijay", });
            Movieitems.Add(new Movie { Name = "7th Sense", Actor = "Surya", });
            Movieitems.Add(new Movie { Name = "Billa 2", Actor = "Ajith Kumar", });
            Movieitems.Add(new Movie { Name = "Nanban", Actor = "Vijay", });
        }
    }
    

    并在listBox1_SelectionChanged 中添加item dynamically in listbox,如下所示:

    Mov.MovieItems.Add(new Movie { Name = "Ghillli", Actor = "Vijay" });
    

    编辑:

    用于更新现有的 Name 属性

    Mov.MovieItems[SelectedIndexValue] = new Movie { Name = "Ghillli", Actor = "Vijay" };
    

    SelectedIndexValue = 0,1,2,3...等

    用于更新集合的Name 属性

    Mov.MovieItems[SelectedIndexValue].Name = "Ghillli";
    

    【讨论】:

    • 我想更新现有的所有 Name 属性,并且只更新 name 属性@smoother sillent
    • 好的,这会更新特定项目的所有值,是否可以只更新 Name 属性而不是 Actor 以及所有 Name 属性
    • @SD7 你的意思是更新Mov.MovieItems所有集合项名称属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 2013-02-01
    • 2021-09-28
    • 2014-04-12
    • 2020-09-02
    • 2018-08-30
    相关资源
    最近更新 更多