我有一个带有项目模板的wpf列表框
<ListBox Margin="2" Background="{x:Null}" BorderBrush="{x:Null}" HorizontalContentAlignment="Stretch" ItemsSource="{Binding AgencyItems}" SelectedItem="{Binding Path=SelectedAgency, Mode=TwoWay}" SelectedValuePath="AgencyName" ItemTemplate="{DynamicResource agencyItemsTemplate}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<ei:CallMethodAction
TargetObject="{Binding}"
MethodName="GetSubmittedItems"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ListBox>
数据模板
<DataTemplate x:Key="agencyItemsTemplate">
<Grid HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="0.62*"/>
<RowDefinition Height="0.38*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Rectangle Fill="#FF4485B6" Margin="1" Grid.RowSpan="2" Stroke="#FFA1A1A1" RadiusX="3" RadiusY="3" StrokeThickness="0.6" />
<TextBlock Margin="0,2,2,2" TextWrapping="Wrap" Text="{Binding Path=SubmittedItemsCount, StringFormat='Total Items: {0}'}" Grid.Row="1" FontSize="13.333" TextAlignment="Right"/>
<TextBlock Margin="5,2,2,2" TextWrapping="Wrap" Text="{Binding Path=AgencyName}" VerticalAlignment="Stretch" FontWeight="Bold" FontSize="14.667" Grid.RowSpan="1"/>
</Grid>
</DataTemplate>
绑定到列表框的集合包含两个属性,您可以在数据模板中看到这些属性
public class SubmitingAgencyItem
{
public string AgencyName { get; set; }
public int SubmittedItemsCount { get; set; }
}
在ViewModel中,我的属性设置为inotify(注意我使用的是SimpleMVVM框架,因此INPC事件通过这个lamda表达式处理)
private string selectedAgency;
public string SelectedAgency
{
get { return selectedAgency; }
set
{
selectedAgency = value;
NotifyPropertyChanged(m => m.SelectedAgency);
}
}
使用事件触发器/混合行为
将selectionChanged事件路由到VM<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<ei:CallMethodAction
TargetObject="{Binding}"
MethodName="GetContributorAgencies"/>
</i:EventTrigger>
项目来源是通过Viewmodel
的方法设置的public void GetContributorAgencies()
{
SubmissionPurgeModel pm = new SubmissionPurgeModel();
if (SelectedContributor != null)
{
AgencyItems = pm.GetContributorData(SelectedContributor);
}
}
代理商商品是SubmittingAgencyItem
类
使用复杂类型时,如何将所选项的一个属性传递给viewmodel?我已经尝试了SelectedValue
和SelectedValuePath
,但它似乎只是将对象命名空间传递回viewmodel?