将列表绑定到VB.Net WPF应用程序中的ComboBox

时间:2013-10-31 17:00:25

标签: wpf vb.net data-binding combobox

我在VB.Net WPF应用程序上有一个ComboBox

<ComboBox HorizontalAlignment="Left" Margin="77,49,0,0" VerticalAlignment="Top" Width="120" ItemsSource="{Binding Path=Server.RecipeList()}" DisplayMemberPath="RecipeID" SelectedValuePath="RecipeID"/>

在代码隐藏中,我有一个名为Server的类变量:

Public Server As BatchServer = New BatchServer

在我的服务器对象中,我有一个List

Private mRecipeList As New List(Of Recipe)

我的服务器默认构造函数是

Public Sub New()
    Server = New BatchRemote.RemoteSupport
    PopulateRecipeList()
End Sub

我想将此List绑定到ComboBox,因此它应该在我的列表中显示每个食谱的RecipeID。我的数据绑定看起来和第一个代码块一样,但是当我运行应用程序时,ComboBox总是空的。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

首先,您需要将Server声明为正确实现INotifyPropertyChanged interfacepublic Property 。然后你需要对RecipeList做同样的事情。然后你应该能Bind这样:

<ComboBox HorizontalAlignment="Left" Margin="77,49,0,0" VerticalAlignment="Top" 
Width="120" ItemsSource="{Binding Path=Server.RecipeList}" DisplayMemberPath="RecipeID"
SelectedValuePath="RecipeID" />

答案 1 :(得分:0)

您的代码不起作用,因为您绑定到一个简单的列表,因此在添加或删除某些列表元素时,该属性不会更新。

在窗口中将辅助列表声明为ObservableCollection read more here并绑定到组合,如:

Private Property auxRecipeList As New ObservableCollection(Of Recipe)

然后在xaml中做这样的绑定:

<ComboBox HorizontalAlignment="Left" Margin="77,49,0,0" VerticalAlignment="Top" Width="120" ItemsSource="{Binding auxRecipeList, Mode=TwoWay, UpdateSourcetrigger=PropertyChanged}" DisplayMemberPath="RecipeID" SelectedValuePath="RecipeID"/>