假设我的GUI上有一个ComboBox和2个TextBox项。我有一个DataView数据(City,PostalCode,Street,ID)。在初始化整个事情时,我用一些数据填充我的DataView:)
City 1, 11111, Street 1, 1
City 1, 22222, Street 2, 2
City 1, 33333, Street 3, 3
现在我想将它绑定到我的ComboBox。 DataView是一个名为m_dvAdresses
的类成员,但此代码没有帮助:
ItemsSource="{Binding Source=m_dvAdresses}"
SelectedValuePath="ID"
DisplayMemberPath="Street">
另外,我想让我的2个ComboBox项目显示PostalCode和City,具体取决于我在ComboBox中选择的内容。就像我选择“街2”一样,TextBox1给我看“City 1”,TexBox2给我看“22222”......
如何仅在WPF代码中绑定所有这些?
答案 0 :(得分:2)
如果m_dvAddresses
是a Field then WPF cannot bind to it。 WPF只能绑定到CLR属性和WPF DependencyProperty
。
public DataView Addresses
{
get { return m_dvAddresses; }
}
另外,为了获得最丰富的WPF体验,请考虑制作集合类型 编辑:我现在意识到您正在使用完全可绑定的ObservableCollection
(或IBindingList
的某种衍生物)。这样,对集合本身的所有更改都会相应地发布到GUI。DataView
。
要回答您的第二个问题(ComboBox
x:Name="Address"
):
<TextBox Text="{Binding SelectedItem.City, ElementName=Address}" />
<TextBox Text="{Binding SelectedItem.Zip, ElementName=Address}" />
答案 1 :(得分:0)
您需要做的是将m_dvAddresses
作为您的类中的属性公开,如@sixlettervariables所述。之后,要从XAML访问它,您需要为绑定指定RelativeSource
属性,以指向类本身,如下所示(此处我的控件是Window
):
ItemsSource="{Binding Addresses, RelativeSource={RelativeSource AncestorType=Window}}"
Name="cmbAddresses"
对于文本框,您必须按如下所示指定其绑定
<TextBox Name="TextBox1"
Text="{Binding SelectedItem.PostalCode, ElementName=cmbAddresses}"/>
类似于第二个TextBox
希望这会有所帮助:)