2016-06-21 33 views
1

我正在创建应用程序,并且当用户在新窗口中单击某个项目时,会创建一个对象并将其作为输入参数传递。如何在新窗口中将对象属性绑定到一组文本框

private void GridItem_MouseUp(object sender, MouseButtonEventArgs e) 
{ 
    Grid item = (Grid)sender; 
    int itemId = Convert.ToInt32(item.Tag) - 1; 
    Bill_Overview BO = new Bill_Overview(Bills[itemId]); 
    BO.ShowDialog(); 
    BO.Owner = this; 
} 

里面的窗口CS文件有这样的:

public DBConnection.Bill Bill { get; set; } 

public Bill_Overview(DBConnection.Bill bill) 
{ 
    InitializeComponent(); 
    Bill = bill; 
} 

和我想的产权法案的每个属性绑定Bill_Overview窗口的WPF中,但无论我已经试过了不起作用。我有这个作为我目前的设置,这是行不通的。

<Grid DataContext="{Binding Bill}"> 
    <TextBox Margin="0,28,0,185" Text="{Binding Path=Payer, Mode=TwoWay}" /> 
    ... 
</Grid> 

有没有人知道如何解决这个问题?我试图寻找一个相当多的解决方案,但似乎没有任何工作。

干杯!

+0

您的属性在更改时不通知绑定引擎,因此视图不知道它需要更新。我建议你阅读这个主题,以便你了解根本原因而不是快速修复。 –

+0

我记得这是关于INotifyPropertyChanged的事,对吧?但我不知道如何实现(还)。然而,由Eyal给出的解决方案做的伎俩,并为窗口的目的:) – DethoRhyne

+0

我的观点正好。它修复了这个特定的问题,而你没有完全理解为什么。你应该尝试一下数据绑定和WPF的实践方法(网上有很多教程)。 –

回答

2

从XAML

DataContext="{Binding Bill}" 

然后在C#中取出的DataContext赋值表达式,这样做:

public DBConnection.Bill Bill { get; set; } 

public Bill_Overview(DBConnection.Bill bill) 
{ 
    InitializeComponent(); 
    Bill = bill; 
    DataContext = bill; 
} 

(DataContext的是由元素的逻辑孩子继承,所以分配窗口的DataContext有效地更新所有孩子的DataContext,除非他们设置了它们自己的值,这就是你使用Grid所做的。

另外,由于C#p roperty Bill不是依赖项属性,分配它不会触发更新,并且窗口将继续使用初始值(空值)。

+0

嗯,这很简单..它甚至适用于TwoWay绑定..太棒了! :) – DethoRhyne

+1

欢呼..我真的建议你看看依赖属性机制,并更好地理解它..这是非常重要的,如果你打算使用XAML作为贸易工具。 –

相关问题