我有2个窗口父窗口 - Window_Products和子窗口 - Window_NewProduct
1)在我的Window_Products中
AddNewProduct()用于将新产品从子窗口添加到列表中
public AddNewProduct()
{
Window_NewProduct newProduct = new Window_NewProduct();
if(newProduct.ShowDialog() = true)
{
ProductsList.Add(//what code should I write here);
}
}
2)在我的Window_NewProduct
中此窗口使用用户控件ProductUserControl,因为我将用户控件用作Page以及Window
<Window>
<local:ProductUserControl x:Name="ProductUserControl">
</Window>
3)在我的产品用户控件
中public ProductUserControl()
{
this.DataContext = new ProductViewModel();
}
4)在我的ProductViewModel
中帮助我解决这个问题。提前谢谢。
答案 0 :(得分:0)
为indow_NewProduct创建一个新的构造函数:
Activity
在你的例子中: 1)在我的Window_Products中:
public ProductUserControl(ProductViewModel model):base()
{
this.DataContext = model;
}
有几件事: 这不好,但它可能符合你的需要: 2.看看MVVM和MVC,将它们结合起来也有控制器。 3.在WPF中,您应该尽可能多地使用DataContext来移动数据,这个NewProduct可能是prant的窗口数据上下文的一部分。
答案 1 :(得分:0)
为您的用户控件添加依赖项属性,并将其绑定到xaml中的依赖项属性,如下所示。
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}"/>
您应该拥有Window_NewProduct的视图模型的产品属性
public class Window_NewProductViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
private ProductDto product;
public ProductDto Product
{
get
{
return this.product;
}
set
{
if (value != this.product)
{
this.product = value;
NotifyPropertyChanged();
}
}
}
}
然后在Window_NewProduct xaml中,您应该将此属性绑定到usercontrols依赖项属性
<local:ProductUserControl x:Name="ProductUserControl" Product="{Binding Product}"/>
将参数添加到Window_NewProduct构造函数中,该构造函数接收ProductDto并将其传递给ViewModel。
public Window_NewProduct(ProductDto product)
{
InitializeComponent();
this.DataContext = new Window_NewProductViewModel() { Product = product };
}
然后在您的MainWindow中,您可以创建一个新的productDto以传递给DetailsWindow。
var newProduct = new ProductDto();
var window_NewProduct = new Window_NewProduct(newProduct);
if (window_NewProduct.ShowDialog() == true)
{
Debug.WriteLine(newProduct.Code);
Debug.WriteLine(newProduct.Name);
}