[英]ListView.SelectedItem BindingtoSource
在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模式中使用它即可。
做这样的事情可能更好。 这样,您甚至不需要任何代码。
{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/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.