jDave1984
jDave1984

Reputation: 962

Bind ListView SelectedItem Column MVVM

I have the following XAML

<ListView ItemsSource="{Binding Franchises, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding SelectedFranchise, Mode=TwoWay}" SelectionMode="Single" Height="150">
    <ListView.View>
        <GridView>
            <GridViewColumn x:Name="FranchiseID" Header="ID" DisplayMemberBinding="{Binding FranchiseID}"/>
            <GridViewColumn Header="Franchise Name" DisplayMemberBinding="{Binding FranchiseName}"/>
        </GridView>
    </ListView.View>
</ListView>

And I want to pass the FranchiseID to my Presenter View Model SelectedFranchise value.

Presenter ViewModel

public class Presenter : ObservableObject
{

    private DataView _Franchises = Controller.BaseballDB.Tables["Franchise"].DefaultView;
    private long _SelectedFranchise;

    public DataView Franchises
    {
        get
        {
            Controller.Refresh();
            _Franchises = Controller.BaseballDB.Tables["Franchise"].DefaultView;
            return _Franchises;
        }
        set
        {
            Controller.Refresh();
            _Franchises = Controller.BaseballDB.Tables["Franchise"].DefaultView;
            RaisePropertyChangeEvent("Franchises");
        }
    }

    public long SelectedFranchise
    {
        get { return _SelectedFranchise; }
        set
        {
            _SelectedFranchise = value;
            Debug.Print(_SelectedFranchise.ToString());
        }
    }
}

Right now it's giving me an error, because it wants to pass the entire string of the Selected Item to the property. I've scoured the web, but apparently everyone wants to only select an item when there's only one column.

Upvotes: 0

Views: 112

Answers (1)

maulik kansara
maulik kansara

Reputation: 1107

Use SelectedValuePath with SelectedValue. Please make sure that DataType is same for FranchiseID and SelectedFranchise.

<ListView ItemsSource="{Binding Franchises, UpdateSourceTrigger=PropertyChanged}" SelectedValuePath="FranchiseID" SelectedValue="{Binding SelectedFranchise}" SelectionMode="Single" Height="150">
    <ListView.View>
        <GridView>
            <GridViewColumn x:Name="FranchiseID" Header="ID" DisplayMemberBinding="{Binding FranchiseID}"/>
            <GridViewColumn Header="Franchise Name" DisplayMemberBinding="{Binding FranchiseName}"/>
        </GridView>
    </ListView.View>
</ListView>

Upvotes: 1

Related Questions