【问题标题】:How to user ObservableCollection from ViewModel in MainWindows.xaml.cs如何在 MainWindow.xaml.cs 中使用 ViewModel 中的 ObservableCollection
【发布时间】:2019-06-28 12:04:11
【问题描述】:

我又在 MVVM 上苦苦挣扎。我已经阅读了一些教程,但我的问题仍然存在......

我正在尝试在我的项目中使用 MVVM,并且需要在我的 MainWindows.xaml.cs 中使用我的 ObservableCollection(在 ViewModel 中创建)。

我有一个模型:

public class MvItems : INotifyPropertyChanged
{
    private string mvName;
    public string MvName
    {
        get { return mvName; }
        set
        {
            mvName = value;
            OnPropertyChanged(nameof(MvName));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

还有一个 ViewModel:

public class MVViewModel
{
    public ObservableCollection<MvItems> Mailverteiler { get { return _Mailverteiler; } }
    public ObservableCollection<MvItems> _Mailverteiler = new ObservableCollection<MvItems>();

    public void LoadMv()
    {
        ObservableCollection<MvItems> temp = new ObservableCollection<MvItems>();

        temp.Add(new MvItems { MvName = "ASD" });
        temp.Add(new MvItems { MvName = "BLA" });
        temp.Add(new MvItems { MvName = "MUH" });

        _Mailverteiler = temp;
    }
}

查看: 现在我可以通过

从我的 MainWindows.xaml.cs 添加数据
zTiredV2.ViewModel.MVViewModel MVObject = new zTiredV2.ViewModel.MVViewModel();
MVObject.LoadMv();

lvMailverteiler.DataContext = MVObject;

然后我看到“ASD”、“BLA”和“MUH”。但是,当我按下另一个按钮时,我现在如何才能访问它们?

需要这样的东西:

foreach (MvItems mvitem in Mailverteiler)
{
    if (mvitem.IsChecked == true)
    {
        await this.ShowMessageAsync("Mailverteiler", mvitem.MvName, MessageDialogStyle.Affirmative);
    }
}

我怎样才能在列表中再添加 1 个项目?

【问题讨论】:

  • 添加新项目就像将其添加到Mailverteiler 一样简单。顺便说一句,支持字段不应该是 public 并且可能是 readonly,而是考虑使用带有初始化程序的仅 getter 自动属性。
  • 谢谢!添加真的很容易...... MVObject._Mailverteiler.Add(new zTiredV2.Model.MvItems { MvName = group.DisplayName, IsChecked=false }); 但是我如何访问列表并稍后添加另一个项目?
  • 好吧,我是个白痴 :D 我可以在我的 MainWindows.xaml.cs 中使用 public zTiredV2.ViewModel.MVViewModel MVList = new zTiredV2.ViewModel.MVViewModel(); public zTiredV2.ViewModel.MaViewModel MAList = new zTiredV2.ViewModel.MaViewModel(); 并使用它......然后像这样迭代:foreach (zTiredV2.Model.MvItems mvitem in MVList.Mailverteiler)

标签: c# wpf xaml mvvm


【解决方案1】:

好吧,它很简单......我可以使用

public zTiredV2.ViewModel.MVViewModel MVList = new zTiredV2.ViewModel.MVViewModel();

所以我可以添加项目,遍历它们等等......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 2012-05-20
    • 2011-05-11
    • 2021-02-27
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多