Странная проблема привязки ListView.SelectedValue (по крайней мере, для меня) - PullRequest
0 голосов
/ 14 марта 2012

У меня есть ListView, который имеет связанные данные, и две дополнительные привязки, подобные этой:

    <ListView x:Name="listViewProducts" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" ItemsSource="{Binding Products}" IsSynchronizedWithCurrentItem="True" 
              SelectedItem="{Binding Path=Product, Mode=OneWayToSource}" SelectedIndex="{Binding Path=SelectedProductIndex, Mode=OneWayToSource}">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="ID" Width="100" 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>

Вот так у меня есть необходимое свойство Product во ViewModel. У меня также есть 4 текстовых поля, например, как следующее:

    < TextBox Grid.Row="0" Grid.Column="1" x:Name="txtName" ... 
        Text="{Binding Text, Path=Product.Name, Mode=TwoWay}" />

И вот что я пытаюсь достичь: Я хочу обновить список только тогда, когда пользователь нажимает кнопку, определенную как:

    <Button Grid.Row="0" Grid.Column="2" x:Name="btnUpdate" .... 
       Content="Update product" 
       Command="{Binding Path=Update_Command}" 
       CommandParameter="{Binding ElementName=listViewProducts, Path=SelectedIndex}" />

И вот что происходит: всякий раз, когда я выбираю элемент в списке, текстовые поля получают правильные свойства. Когда я изменяю одно из текстовых полей и выбираю другое, модель немедленно обновляется. Как это возможно, если выбранный элемент связан с режимом «OneWaytoSource»?

1 Ответ

0 голосов
/ 12 апреля 2012

Мне кажется, что это происходит потому, что вы привязали SelectedItem к свойству Product в вашей ViewModel, после того, как вы выбрали элемент в listView, он передаст ссылку на свойство Product через listView.SelectedItem, поэтому у вас будет ссылка натот же объект, который у вас есть в коллекции продуктов.После этого вы используете привязки TwoWay (TextBoxes) и изменяете свойства Продукта, что автоматически отразит эти изменения в listView через ссылку.

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