ComboBox WPF数据绑定到DataView

时间:2011-03-08 16:06:32

标签: c# wpf data-binding combobox

假设我的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代码中绑定所有这些?

2 个答案:

答案 0 :(得分:2)

如果m_dvAddressesa 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

希望这会有所帮助:)