我在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
总是空的。
我在这里做错了什么?
答案 0 :(得分:0)
首先,您需要将Server
声明为正确实现INotifyPropertyChanged
interface 的public 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"/>