C# 将列表框绑定到列表的简单方法<;字符串>;在wpf中,使用安全更新

C# 将列表框绑定到列表的简单方法<;字符串>;在wpf中,使用安全更新,c#,wpf,xaml,listbox,C#,Wpf,Xaml,Listbox,这个问题很简单,但每次我在这里看到类似问题的答案时,答案并没有用一个简单的例子来解释。这是我的密码: xaml: 它正确地显示了“testing…”项,但当我在列表中添加新项时,它不会显示在列表框中。如何在不使用ListBox_PuntosIntermedios.items.Refresh()的情况下更正代码以显示项目;这有时会给我一些错误,调试器甚至不会显示这些错误 我也看到过其他答案,比如“使用inotify…”“使用mvvm…”,但它们并没有为我这样的noob提供一种简单的方法 提前感谢您

这个问题很简单,但每次我在这里看到类似问题的答案时,答案并没有用一个简单的例子来解释。这是我的密码:

xaml:

它正确地显示了“testing…”项,但当我在列表中添加新项时,它不会显示在列表框中。如何在不使用ListBox_PuntosIntermedios.items.Refresh()的情况下更正代码以显示项目;这有时会给我一些错误,调试器甚至不会显示这些错误

我也看到过其他答案,比如“使用inotify…”“使用mvvm…”,但它们并没有为我这样的noob提供一种简单的方法


提前感谢您的帮助

在您的示例中,最简单的方法是使用
可观察集合
(在System.Collections.ObjectModel命名空间中)而不是列表。当项目添加/删除到集合中时,ObservableCollection将通知您的列表框,您的UI将通过WPF数据绑定的魔力进行更新。当集合更改时,用户界面将更新(新项目将显示在列表框中,删除的项目将从列表框中删除),这将使您达到一半

当“MyText”属性更改时,此对象将向WPF数据绑定发送通知,这将允许您的列表框相应地更新。要将此新对象与列表框绑定在一起,您必须更改XAML,以便列表框显示“MyText”属性,并将
ObservableCollection
更改为
ObservableCollection

下面是最后一个代码示例:

XAML(请注意DisplayMemberPath属性):


最后,我发现本教程有助于学习WPF数据绑定:

我创建了一个非常简单的示例解决方案

如果您正在使用WPF进行开发,并且希望使用双向绑定,那么最好的选择是MVVM。有一个学习曲线,但它是值得的


在这个示例中,我使用MVVMLight工具包简化了一些事情。希望这能有所帮助。

在下面的网站上进行快速Stackoverflow谷歌搜索有大量的例子,但这些例子对我来说还不够清楚。这些例子太直截了当了,甚至一点都不有趣。请给我一个链接,上面有一个由@Steve Wong提供的答案,我会闭嘴并同意你的看法。这不是它的工作原理@JulianDavidBautistaOsorio,你有自己的研究吗?你无法更好地解释它,而且说到点子上,谢谢!!!!你让我开心:)没问题,朱利安。在我看来,WPF有一个陡峭的学习曲线,但完全值得花费时间/精力/耐心。祝你好运非常感谢你的回答,我从中学到了一些技巧。祝您有个美好的一天。
<ListBox Name="ListBox_PuntosIntermedios" MaxHeight="80" Height="80" ScrollViewer.VerticalScrollBarVisibility="Auto">
            </ListBox>
List<string> Lista_punto_intermedio = new List<string>();
Lista_punto_intermedio.Add("testing...");
ListBox_PuntosIntermedios.ItemsSource = Lista_punto_intermedio;
ObservableCollection<string> Lista_punto_intermedio = new ObservableCollection<string>();
public class MyNotifyableText : INotifyPropertyChanged
{
   private string _myText;
   public string MyText {
       get { return this._myText; }
       set
       {
             if(this._myText!= value)
             {
                  this._myText= value;
                  this.NotifyPropertyChanged("MyText");
             }
        }
   }

   public event PropertyChangedEventHandler PropertyChanged;

   public void NotifyPropertyChanged(string propName)
   {
        if(this.PropertyChanged != null)
             this.PropertyChanged(this, new PropertyChangedEventArgs(propName));
   }
}
<ListBox Name="ListBox_PuntosIntermedios" DisplayMemberPath="MyText" MaxHeight="80" Height="80" ScrollViewer.VerticalScrollBarVisibility="Auto" >
            </ListBox>
ObservableCollection<MyNotifyableText> Lista_punto_intermedio = new ObservableCollection<MyNotifyableText>();
Lista_punto_intermedio.Add(new MyNotifyableText(){ MyText="testing..." });
ListBox_PuntosIntermedios.ItemsSource = Lista_punto_intermedio;