我在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模式中使用它。
答案 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/