Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ComboBox.SelectedValue not updating from binding source

Here's my binding source object:

Public Class MyListObject      Private _mylist As New ObservableCollection(Of String)     Private _selectedName As String      Public Sub New(ByVal nameList As List(Of String), ByVal defaultName As String)          For Each name In nameList             _mylist.Add(name)         Next          _selectedName = defaultName      End Sub      Public ReadOnly Property MyList() As ObservableCollection(Of String)         Get             Return _mylist         End Get     End Property      Public ReadOnly Property SelectedName() As String         Get             Return _selectedName         End Get     End Property  End Class 

Here is my XAML:

<Window x:Class="Window1"     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     Title="Window1" Height="300" Width="300"     xmlns:local="clr-namespace:WpfApplication1"         >      <Window.Resources>         <ObjectDataProvider x:Key="MyListObject" ObjectInstance="" />     </Window.Resources>          <Grid>          <ComboBox Height="23"                   Margin="24,91,53,0"                   Name="ComboBox1"                   VerticalAlignment="Top"                   SelectedValue="{Binding Path=SelectedName, Source={StaticResource MyListObject}, Mode=OneWay}"                   ItemsSource="{Binding Path=MyList, Source={StaticResource MyListObject}, Mode=OneWay}"                   />          <Button Height="23"                 HorizontalAlignment="Left"                 Margin="47,0,0,87"                 Name="btn_List1"                 VerticalAlignment="Bottom"                 Width="75">List 1</Button>          <Button Height="23"                 Margin="0,0,75,87"                 Name="btn_List2"                 VerticalAlignment="Bottom"                 HorizontalAlignment="Right"                 Width="75">List 2</Button>     </Grid> </Window> 

Here's the code-behind:

Class Window1      Private obj1 As MyListObject     Private obj2 As MyListObject     Private odp As ObjectDataProvider      Public Sub New()          InitializeComponent()          Dim namelist1 As New List(Of String)         namelist1.Add("Joe")         namelist1.Add("Steve")         obj1 = New MyListObject(namelist1, "Steve") .         Dim namelist2 As New List(Of String)         namelist2.Add("Bob")         namelist2.Add("Tim")         obj2 = New MyListObject(namelist2, "Tim")          odp = DirectCast(Me.FindResource("MyListObject"), ObjectDataProvider)         odp.ObjectInstance = obj1      End Sub      Private Sub btn_List1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btn_List1.Click          odp.ObjectInstance = obj1      End Sub      Private Sub btn_List2_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btn_List2.Click          odp.ObjectInstance = obj2      End Sub End Class 

When the Window first loads, the bindings hook up fine. The ComboBox contains the names "Joe" and "Steve" and "Steve" is selected by default. However, when I click a button to switch the ObjectInstance to obj2, the ComboBox ItemsSource gets populated correctly in the dropdown, but the SelectedValue is set to Nothing instead of being equal to obj2.SelectedName.

like image 787
Rob Sobers Avatar asked Oct 29 '08 16:10

Rob Sobers


1 Answers

We had a similar issue last week. It has to do with how SelectedValue updates its internals. What we found was if you set SelectedValue it would not see the change we had to instead set SelectedItem which would properly update every thing. My conclusion is that SelectedValue is designed for get operations and not set. But this may just be a bug in the current version of 3.5sp1 .net

like image 73
Aaron Fischer Avatar answered Sep 21 '22 18:09

Aaron Fischer