ListView.SelectedItem BindingtoSource

时间:2012-03-12 07:35:59

标签: c# wpf xaml data-binding mvvm

我在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>

在代码隐藏文件中,我有一个属性:

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

目标是将此属性设置为listView的选定行,然后在4个文本框中显示此属性的字段。 如果我从代码中手动设置此属性,我可以在文本框中显示信息,但我无法弄清楚如何从ListView.SelectedItem绑定对象。据我所知,我应该使用OneWayToSource绑定模式,但我不知道如何。

我也打开了其他解决方案,只要我能在MVVM模式中使用它。

1 个答案:

答案 0 :(得分:1)

做这样的事情可能更好。这样你甚至不需要任何代码隐藏。

{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/