ListView.SelectedItem BindingtoSource - PullRequest
       7

ListView.SelectedItem BindingtoSource

0 голосов
/ 12 марта 2012

Я столкнулся с серьезной проблемой для себя в процессе изучения привязок WPF. Я должен создать приложение, которое использует Listview, который выглядит следующим образом:

<ListView.View>
    <GridView>
        <GridViewColumn Header="ID" Width="75" DisplayMemberBinding="{Binding ID}" />
        <GridViewColumn Header="Name" Width="170" DisplayMemberBinding="{Binding Name}" />
        <GridViewColumn Header="Price" Width="100" DisplayMemberBinding="{Binding Price}" />
        <GridViewColumn Header="Reseller" Width="Auto" DisplayMemberBinding="{Binding Reseller}" />
    </GridView>
</ListView.View>

В файле codebehind у меня есть свойство:

public Product seletedRow
{
    get { return m_Product; }
    set { m_Product = value; PropertyChanged("Product"); }
}

Цель состоит в том, чтобы установить это свойство для выбранной строки списка, а затем отобразить поля этого свойства в 4 текстовых полях. Если я устанавливаю это свойство вручную из кода, я могу отображать информацию в текстовых полях, но не могу понять, как связать объект из ListView.SelectedItem. Насколько я обнаружил, я должен использовать режим привязки OneWayToSource, но я не знаю, как.

Я также открыт для других решений, если я могу использовать его в шаблоне MVVM.

1 Ответ

1 голос
/ 12 марта 2012

Вероятно, лучше сделать что-то подобное.Таким образом, вам даже не понадобится какой-либо программный код.

{Binding ElementName=myListView, Path=SelectedItem.ID, UpdateSourceTrigger=PropertyChanged}

Вам нужно будет присвоить ListView такое имя.

<ListView Name="myListView">

Это будет выглядеть примерно так.

<ListView Name="myListView">
    <ListView.View>
                <GridView>
                    <GridViewColumn Header="ID" Width="75" DisplayMemberBinding="{Binding ID}" />
                    <GridViewColumn Header="Name" Width="170" DisplayMemberBinding="{Binding Name}" />
                    <GridViewColumn Header="Price" Width="100" DisplayMemberBinding="{Binding Price}" />
                    <GridViewColumn Header="Reseller" Width="Auto" DisplayMemberBinding="{Binding Reseller}" />
                </GridView>
            </ListView.View>
</ListView>

<TextBox Text="{Binding ElementName=myListView, Path=SelectedItem.ID, UpdateSourceTrigger=PropertyChanged}"/>

Редактировать:

Если вы не хотите расширять логику, вы, вероятно, захотите разобраться с использованием ACB, как с ACB, вы можете сделать что-то подобное.

acb:CommandBehavior.Event="SelectedItemChanged"
acb:CommandBehavior.Command="{Binding SelectedItemChanged}"
acb:CommandBehavior.CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}, Path=SelectedItem}"

Это, по сути, позволит вам сохранять конкретный SelectedItem каждый раз, когда вы выбираете новый элемент в списке.

http://marlongrech.wordpress.com/2008/12/13/attachedcommandbehavior-v2-aka-acb/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...