Data binding Silverlight扩展器。带有附加按钮的标题

Data binding Silverlight扩展器。带有附加按钮的标题,data-binding,silverlight-4.0,datatemplate,Data Binding,Silverlight 4.0,Datatemplate,单击Expander.Header上的Complete Survey按钮时,我想导航到另一个页面并传递viewmodel中的一些信息。我让扩展器工作,这样当它被选中时,它就会展开,并且selecteditem属性被正确绑定和填充。但是,如果我只是右键单击按钮,selecteditem不会更改,即使是第一个操作,也不会填充。如果在选择扩展器之前按下按钮控件,如何触发所选项目?如果可能的话,我更喜欢MVVM解决方案。谢谢 <ListBox x:Name="SearchList"

单击Expander.Header上的Complete Survey按钮时,我想导航到另一个页面并传递viewmodel中的一些信息。我让扩展器工作,这样当它被选中时,它就会展开,并且selecteditem属性被正确绑定和填充。但是,如果我只是右键单击按钮,selecteditem不会更改,即使是第一个操作,也不会填充。如果在选择扩展器之前按下按钮控件,如何触发所选项目?如果可能的话,我更喜欢MVVM解决方案。谢谢

<ListBox  x:Name="SearchList"
                          Grid.Row="1"
                          Margin="5,0,5,0"
                          Grid.Column="0"
                          Background="Transparent"
                          BorderThickness="0"
                          BorderBrush="Transparent"
                          ItemsSource="{Binding Path=SearchResults}"
                          SelectedItem="{Binding Path=SelectedResult,Mode=TwoWay,Converter={StaticResource DebugConverter}}"
                          HorizontalContentAlignment="Stretch"
                          HorizontalAlignment="Stretch">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <toolkit:Expander>
                                <sb:BindingHelper.Binding>
                                    <sb:RelativeSourceBinding TargetProperty="IsExpanded"
                                                              Path="IsSelected"
                                                              RelativeMode="FindAncestor"
                                                              AncestorType="ListBoxItem" BindingMode="TwoWay" />
                                </sb:BindingHelper.Binding>
                                <toolkit:Expander.Header>
                                    <Grid Width="525">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="25" />
                                            <ColumnDefinition Width="100" />
                                        </Grid.ColumnDefinitions>
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="*" />
                                        </Grid.RowDefinitions>
                                        <TextBlock Grid.Column="0"
                                                   Grid.Row="0"
                                                   Text="{Binding Path=PatientName}" />
                                        <Button Grid.Column="2"
                                                Grid.Row="0"
                                                Content="Complete Survey">
                                            <sb:BindingHelper.Binding>
                                                <sb:RelativeSourceBinding Path="OpenSurveyCommand"
                                                                          TargetProperty="Command"
                                                                          RelativeMode="ParentDataContext" />
                                            </sb:BindingHelper.Binding>
                                        </Button>
                                    </Grid>
                                </toolkit:Expander.Header>
                                <StackPanel>
                                    <TextBlock Text="{Binding MRN,Converter={StaticResource StringLabelConverter},ConverterParameter=MRN}" />
                                    <TextBlock Text="{Binding OriginalVisitNumber,Converter={StaticResource StringLabelConverter},ConverterParameter='Original Visit Number'}" />
                                    <TextBlock Text="{Binding OriginalAdmitDate,Converter={StaticResource StringLabelConverter},ConverterParameter='Original Admit Date'}" />
                                    <TextBlock Text="{Binding OriginalReason,Converter={StaticResource StringLabelConverter},ConverterParameter='Original Reason'}" />
                                    <TextBlock Text="{Binding ReAdmitVisitNumber,Converter={StaticResource StringLabelConverter},ConverterParameter='ReAdmit Visit Number'}" />
                                    <TextBlock Text="{Binding ReAdmitDate,Converter={StaticResource StringLabelConverter},ConverterParameter='Readmit Date'}" />
                                    <TextBlock Text="{Binding ReAdmitReason,Converter={StaticResource StringLabelConverter},ConverterParameter='ReAdmit Reason'}" />
                                </StackPanel>

                            </toolkit:Expander>


                        </DataTemplate>
                    </ListBox.ItemTemplate>

我不熟悉您使用的BindingHelper类,但是如果它在后台使用标准命令,那么我会将命令参数绑定到“item”


这样,您就可以访问commands executed事件中的绑定项

我不熟悉您使用的BindingHelper类,但是如果它在后台使用标准命令,那么我会将命令参数绑定到“item”


这样,您就可以访问commands executed事件中的绑定项

使用viewmodel集合和viewmodel中的按钮解决了此问题。除了ObservableCollectionVM之外,没有什么特别的魔法可以解决这个问题,它使用viewmodel中带有按钮的viewmodels集合。除了ObservaleCollectionVM之外,没有什么特别的魔法,我还没有尝试过,但我认为通过将绑定的项目列表更改为绑定的viewmodels列表,它实际上会解决我的问题。在此之后,我遇到了一个类似的情况,在datatemplate中使用了另一个headered控件,并使用vm而不是items,这使它能够按预期工作。我会让你知道我还没有尝试过,但我认为通过将项目的绑定列表更改为viewmodels的绑定列表,实际上可以解决我的问题。在此之后,我遇到了一个类似的情况,在datatemplate中使用了另一个headered控件,并使用vm而不是items,这使它能够按预期工作。我会让你知道的