C# WPF-如何从子窗口到父窗口获取值
我有两个windows父窗口-窗口产品和子窗口-窗口新产品 1) 在我的橱窗里C# WPF-如何从子窗口到父窗口获取值,c#,.net,wpf,C#,.net,Wpf,我有两个windows父窗口-窗口产品和子窗口-窗口新产品 1) 在我的橱窗里 我有一个列表ObservableCollection products在此窗口中显示产品列表 AddNewProduct()用于将新产品从子窗口添加到列表中 public AddNewProduct() { Window_NewProduct newProduct = new Window_NewProduct(); if(newProduct.ShowDialog() = true)
- 我有一个列表ObservableCollection products在此窗口中显示产品列表
- AddNewProduct()用于将新产品从子窗口添加到列表中
public AddNewProduct() { Window_NewProduct newProduct = new Window_NewProduct(); if(newProduct.ShowDialog() = true) { ProductsList.Add(//what code should I write here); } }
- 此窗口使用用户控件ProductUserControl,因为我将用户控件用作页面和窗口
4) 在我的ProductViewModel中<Window> <local:ProductUserControl x:Name="ProductUserControl"> </Window>
- 我有一个对象产品,其中存储了Prod\u Name、Prod\u Code等值
- 我想要的是,在我将该产品保存到数据库中之后,将该对象产品返回到父窗口(window_Products),以便我可以将新产品添加到上面的可观察集合中
- 我的对象如何通过usercontrol、子窗口从视图模型返回,然后到达父窗口
帮我解决这个问题。提前感谢。为indow_新产品创建一个新构造函数:
在您的示例中: 1) 在我的窗口中,您的产品变成:public ProductUserControl(ProductViewModel model):base() { this.DataContext = model; }
var myPVM = new ProductViewModel(); Window_NewProduct newProduct = new Window_NewProduct(myPVM); if(newProduct.ShowDialog() = true) { ProductsList.Add(myPVM.<THE NEW PRODUCT PROPERTY YOU WILL WRITE>); }
有几件事: 1.这并不好,但可能适合您的需要: 2.看看MVVM和MVC,将它们结合起来也有控制器。var myPVM=新产品视图模型(); 窗口\新产品新产品=新窗口\新产品(myPVM); if(newProduct.ShowDialog()=true) { 产品列表添加(myPVM.); }
3.在WPF中,您应该尽可能多地使用DataContext来移动数据,此新产品可能是prant窗口数据上下文的一部分。为您的用户控件添加依赖项属性,并绑定到xaml中,如下所示
然后在窗口_NewProduct xaml中,您应该将此属性绑定到usercontrols依赖项属性public static readonly DependencyProperty ProductProperty = DependencyProperty.Register( "Product", typeof(ProductDto), typeof(ProductUserControl), new FrameworkPropertyMetadata(null)); public ProductDto Product { get { return (ProductDto)this.GetValue(ProductProperty); } set { this.SetValue(ProductProperty, value); } } <TextBox Margin="2" Text="{Binding Path=Product.Code, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> <TextBox Margin="2" Text="{Binding Path=Product.Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
然后在主窗口中,您只需创建一个新的productDto以传递给DetailsWindow<local:ProductUserControl x:Name="ProductUserControl" Product="{Binding Product}"/>
var newProduct = new ProductDto(); var window_NewProduct = new Window_NewProduct(newProduct); if (window_NewProduct.ShowDialog() == true) { Debug.WriteLine(newProduct.Code); Debug.WriteLine(newProduct.Name); }
当我运行itI时,我得到了一个XamlParseException。我在添加依赖项属性后得到了Product属性,但是Product Binding导致了一个异常。您需要为Window_NewProduct将Product属性也添加到viewmodel,并且为usercontrol.K没有viewmodel,这也被清除了,但在代码的第二块中出现了新错误<local:ProductUserControl x:Name="ProductUserControl" Product="{Binding Product}"/>
public Window_NewProduct(ProductDto product) { InitializeComponent(); this.DataContext = new Window_NewProductViewModel() { Product = product }; }
var newProduct = new ProductDto(); var window_NewProduct = new Window_NewProduct(newProduct); if (window_NewProduct.ShowDialog() == true) { Debug.WriteLine(newProduct.Code); Debug.WriteLine(newProduct.Name); }