【问题标题】:Passing data from window to viewmodel in C# wpf在 C# wpf 中将数据从窗口传递到视图模型
【发布时间】:2021-06-28 05:54:20
【问题描述】:

我是 wpf 的新手。我在 MainWindow 中有一个按钮。单击按钮时,我会生成一个 SecondWindow。我想将 List<string> 从 MainWindow 传递给 SecondWindow。我有一个“SecondViewModel”类作为Window.DataContextSecondWindow。 '列表' 应该可用于SecondViewModel。我该怎么做?

MainWindow.xaml

<Grid>
        <Button x:Name="showSeondWindow"
         Content="Show second window"
         Click="showSeondWindow_Click"
        />
    </Grid>

MainWindow.cs

public partial class MainWindow : Window
    {
        // should able to pass this list to second window
        List<string> dataToPass = new List<string>();
        public MainWindow()
        {
            InitializeComponent();

            dataToPass.Add("apple");
            dataToPass.Add("banana");
            dataToPass.Add("orange");

        }

        private void showSeondWindow_Click(object sender, RoutedEventArgs e)
        {

            // How to pass that list to second window???
            SecondWindow sw = new SecondWindow();
            sw.Show();
        }
    }

SecondWindow.xaml


<Window.DataContext>
        <local:SecondViewModel/>
</Window.DataContext>

SecondViewModel.cs

public class SecondViewModel
    {
        public SecondViewModel()
        {
            // I want to use the List passed from main window to SecondWindow inside this
            // SecondViewModel Class
        }

        
    }

【问题讨论】:

  • 为什么不通过构造函数传递列表?
  • @AdrianEfford 那么我如何在SecondViewModel 类中使用?我对 wpf 完全陌生。我是否需要更改 '' 中的某些内容
  • 让我为你创建一个详细的答案

标签: c# wpf mvvm


【解决方案1】:

首先从 XAML 中删除 DataContext 初始化(对于这种情况)。 然后创建SecondWindow的数据上下文,并用这个数据上下文初始化SecondWindow实例。

MainWindow.xaml.cs

public partial class MainWindow : Window
{
    // should able to pass this list to second window
    private List<string> DataToPass { get; }

    public MainWindow()
    {
        InitializeComponent();

        this.DataToPass = new List<string> 
        {
          "apple",
          "banana",
          "orange"
        };
    }

    private void ShowSeondWindow_Click(object sender, RoutedEventArgs e)
    {
        // How to pass that list to second window???

        var secondWindowViewModel = new SecondWindowViewModel(this.DataToPass);
        var secondWindow = new SecondWindow() { DataContext = secondWindowViewModel };
        secondWindow.Show();
    }
}

SecondWindowViewModel.cs

public class SecondWindowViewModel : INotifyPropertyChanged
{
    private List<string> Data { get; }

    public SecondWindowViewModel(IEnumerable<string> data)
    {
        // I want to use the List passed from main window to SecondWindow inside this
        this.Data = data.ToList();

        // SecondViewModel Class
    }        
}

然后设置从SecondWindowSecondWindowViewModel 的绑定以显示数据。

请注意,对于数据绑定,您的视图模型类应实现 INotifyPropertyChanged 并从每个属性设置器中引发 INotifyPropertyChanged.PropertyChanged

【讨论】:

    猜你喜欢
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多