WPF & Linq To SQL binding ComboBox to foreign key
        Posted  
        
            by ZeroDelta
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by ZeroDelta
        
        
        
        Published on 2010-05-14T21:11:11Z
        Indexed on 
            2010/05/14
            21:14 UTC
        
        
        Read the original article
        Hit count: 269
        
I'm having trouble binding a ComboBox to a foreign key in WPF using Linq To SQL. It works fine when displaying records, but if I change the selection on the ComboBox, that change does not seem to affect the property to which it is bound.
My SQL Server Compact file has three tables: Players (PK is PlayerID), Events (PK is EventID), and Matches (PK is MatchID). Matches has FKs for the the other two, so that a match is associated with a player and an event.
My window for editing a match uses a ComboBox to select the Event, and the ItemsSource is set to the result of a LINQ query to pull all of the Events. And of course the user should be able to select the Event based on EventName, not EventID.
Here's the XAML:
<ComboBox x:Name="cboEvent" DisplayMemberPath="EventName" 
     SelectedValuePath="EventID" 
     SelectedValue="{Binding Path=EventID, 
     UpdateSourceTrigger=PropertyChanged}"  />
And some code-behind from the Loaded event handler:
var evt = from ev in db.Events
                      orderby ev.EventName
                      select ev;
cboEvent.ItemsSource = evt.ToList();
var mtch = from m in db.Matches
           where m.PlayerID == ((Player)playerView.CurrentItem).PlayerID
           select m;
matchView = (CollectionView)CollectionViewSource.GetDefaultView(mtch);
this.DataContext = matchView;
When displaying matches, this works fine--I can navigate from one match to the next and the EventName is shown correctly. However, if I select a new Event via this ComboBox, the CurrentItem of the CollectionView doesn't seem to change. I feel like I'm missing something stupid!
- Note: the Player is selected via a ListBox, and that selection filters the matches displayed--this seems to be working fine, so I didn't include that code. That is the reason for the "PlayerID" reference in the LINQ query
© Stack Overflow or respective owner