c# - 将 View 模型中的 ObservableCollection 绑定(bind)到列表框

标签 c# wpf mvvm binding viewmodel

我对 MVVM 和绑定(bind)非常陌生,我正在努力学习使用它。
我遇到了将 View 模型绑定(bind)到 View 的问题,特别是将可观察集合绑定(bind)到列表框。

这就是我的 View 模型的样子:

namespace MyProject
{
    using Model; 

public class NetworkViewModel: INotifyPropertyChanged
{

    private ObservableCollection<Person> _networkList1 = new ObservableCollection<Person>();
    public ObservableCollection<Person> NetworkList1 //Binds with the listbox
    {
        get { return _networkList1; }
        set { _networkList1 = value; RaisePropertyChanged("_networkList1"); }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void RaisePropertyChanged(string propertyName)
    {
        var handler = this.PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public NetworkViewModel() 
    {
        _networkList1 = new ObservableCollection<Person>()
        {
            new Person(){FirstName="John", LastName="Doe"},
            new Person(){FirstName="Andy" , LastName="Boo"}
        };
   }
}

在我看来
namespace MyProject
{
    public partial class Networking : Window
    {

        public Networking()
       {
            InitializeComponent();

            this.DataContext = new NetworkViewModel();

            lb1.ItemsSource = _networkList1;
        }
     }
}  

在 XAML 中我有
<ListBox x:Name="lb1" HorizontalAlignment="Left" ItemsSource="{Binding NetworkList1}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock >
                         <Run Text="{Binding Path=FirstName}"/>
                         <Run Text="{Binding Path=LastName}"/>
                    </TextBlock>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

最佳答案

看来您的 View 模型中可能有错字。

RaisePropertyChanged("_networkList1");

您想为公共(public)属性而不是私有(private)变量引发属性更改通知。
RaisePropertyChanged("NetworkList1");

这可能会阻止您的 View 正确更新。

关于c# - 将 View 模型中的 ObservableCollection 绑定(bind)到列表框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30313003/

相关文章:

wpf - 如何覆盖 WPF 中的 TreeViewItem 以允许异步加载子项?

c# - Caliburn Micro-在ViewModels之间共享数据

wpf - 在 Generic.xaml 中找不到命名样式

c# - 以编程方式更改 ListBox 的 SelectedItem 时未触发 SelectionChanged 命令

c# - 如何从控制面板的区域配置中读取 "List Separator"设置?

c# - 在 C# 中这种委托(delegate)用法的名称是什么?

c# - 然后在 Entity Framework 核心中包含显式加载?

mvvm - 如何在MVVM中找到集中控制?

wpf - 将单元格对象的属性绑定(bind)到 WPF DataGrid 中的 DataGridCell

c# - 从 C# 控制台应用程序运行 CMD?