Silverlight 4.0 Silverlight HeaderedContentControl。标题焦点问题

Silverlight 4.0 Silverlight HeaderedContentControl。标题焦点问题,silverlight-4.0,mvvm,datatemplate,Silverlight 4.0,Mvvm,Datatemplate,我在HeaderedContentControl的标题中有一个按钮,当我单击该按钮时,该命令会正确触发,但由于未选择实际的listboxitem,因此我没有可处理的数据。首先选择子控件或与之交互时,如何使HeaderedContentControl被选择 这是我的控制 <ListBox x:Name="SearchList" Grid.Row="1" Grid.Column="0"

我在HeaderedContentControl的标题中有一个按钮,当我单击该按钮时,该命令会正确触发,但由于未选择实际的listboxitem,因此我没有可处理的数据。首先选择子控件或与之交互时,如何使HeaderedContentControl被选择

这是我的控制

<ListBox  x:Name="SearchList"
                      Grid.Row="1"
                      Grid.Column="0"
                      Background="Transparent"
                      BorderThickness="0"
                      ItemsSource="{Binding Path=SearchResults}"
                      SelectedItem="{Binding Path=SelectedResult,Mode=TwoWay,Converter={StaticResource DebugConverter}}"
                      HorizontalContentAlignment="Stretch"
                      HorizontalAlignment="Stretch"
                      ScrollViewer.VerticalScrollBarVisibility="Visible" >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Border Width="600"
                                Margin="20,2,0,0"
                                Style="{StaticResource BorderStyle}">
                            <sb:BindingHelper.Binding>
                                <sb:BindingList>
                                    <sb:RelativeSourceBinding TargetProperty="Background"
                                                              RelativeMode="FindAncestor"
                                                              AncestorType="ListBoxItem"
                                                              Converter="{StaticResource DebugConverter}"
                                                              ConverterParameter="AlternatingRows" />
                                </sb:BindingList>
                            </sb:BindingHelper.Binding>
                            <toolkit:HeaderedContentControl IsTabStop="True">
                                <toolkit:HeaderedContentControl.Header>
                                    <Grid Width="575"
                                          Margin="5,5,10,0">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="100" />
                                            <ColumnDefinition Width="100" />
                                            <ColumnDefinition Width="100" />
                                        </Grid.ColumnDefinitions>
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="*" />
                                        </Grid.RowDefinitions>
                                        <TextBlock Grid.Column="0"
                                                   Grid.Row="0"
                                                   Text="{Binding Path=PatientName}"
                                                   HorizontalAlignment="Left"
                                                   Margin="0" />
                                        <Button Grid.Column="3"
                                                Grid.Row="0"
                                                Content="Complete Survey"
                                                IsTabStop="False">
                                            <sb:BindingHelper.Binding>
                                                <sb:BindingList>
                                                    <sb:RelativeSourceBinding Path="DataContext.OpenSurveyCommand"
                                                                              TargetProperty="Command"
                                                                              RelativeMode="FindAncestor"
                                                                              AncestorType="ListBox"
                                                                              Converter="{StaticResource DebugConverter}"
                                                                              ConverterParameter="SurveyCommandButton" />
                                                    <sb:RelativeSourceBinding Path="DataContext.HasFocus"
                                                                              TargetProperty="Focus" />

                                                </sb:BindingList>
                                            </sb:BindingHelper.Binding>
                                        </Button>
                                    </Grid>
                                </toolkit:HeaderedContentControl.Header>
                                <sb:BindingHelper.Binding>
                                    <sb:RelativeSourceBinding TargetProperty="IsExpanded"
                                                              Path="IsSelected"
                                                              RelativeMode="FindAncestor"
                                                              AncestorType="ListBoxItem"
                                                              BindingMode="TwoWay" />
                                </sb:BindingHelper.Binding>
                                <Grid Margin="5,2,0,2">
                                    <Grid.RowDefinitions>
                                        <RowDefinition />
                                        <RowDefinition />
                                        <RowDefinition />
                                        <RowDefinition />
                                    </Grid.RowDefinitions>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="275" />
                                        <ColumnDefinition Width="250" />
                                    </Grid.ColumnDefinitions>
                                    <TextBlock  Grid.Row="0"
                                                Grid.Column="0"
                                                Text="{Binding MRN,Converter={StaticResource StringLabelConverter},ConverterParameter=MRN}" />
                                    <TextBlock Grid.Row="1"
                                               Grid.Column="0"
                                               Style="{StaticResource SearchResultsTextBlockStyle }"
                                               Text="{Binding OriginalVisitNumber,Converter={StaticResource StringLabelConverter},ConverterParameter='Original Visit Number'}" />
                                    <TextBlock Grid.Row="2"
                                               Grid.Column="0"
                                               Style="{StaticResource SearchResultsTextBlockStyle }"
                                               Text="{Binding OriginalAdmitDate,Converter={StaticResource StringLabelConverter},ConverterParameter='Original Admit Date'}" />
                                    <TextBlock Grid.Row="3"
                                               Grid.Column="0"
                                               Style="{StaticResource SearchResultsTextBlockStyle }"
                                               Text="{Binding OriginalReason,Converter={StaticResource StringLabelConverter},ConverterParameter='Original Reason'}" />
                                    <TextBlock Grid.Row="1"
                                               Grid.Column="1"
                                               Style="{StaticResource SearchResultsTextBlockStyle }"
                                               Text="{Binding ReAdmitVisitNumber,Converter={StaticResource StringLabelConverter},ConverterParameter='ReAdmit Visit Number'}" />
                                    <TextBlock Grid.Row="2"
                                               Grid.Column="1"
                                               Style="{StaticResource SearchResultsTextBlockStyle }"
                                               Text="{Binding ReAdmitDate,Converter={StaticResource StringLabelConverter},ConverterParameter='Readmit Date'}" />
                                    <TextBlock Grid.Row="3"
                                               Grid.Column="1"
                                               Style="{StaticResource SearchResultsTextBlockStyle }"
                                               Text="{Binding ReAdmitReason,Converter={StaticResource StringLabelConverter},ConverterParameter='ReAdmit Reason'}" />
                                </Grid>

                            </toolkit:HeaderedContentControl>
                        </Border>

                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>


实际修复涉及一些代码混乱,我将实际结果列表对象移动到一个viewModels集合中,并将按钮命令的代码放在该viewModel中,而不是父VM中。这允许更大的灵活性

using System.Windows.Input;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using GalaSoft.MvvmLight.Messaging;
using WavelengthIS.Silverlight.Core.Helpers;

namespace ReadmissionTrackingApplication.Client.ViewModel
{
    /// <summary>
    /// This class contains properties that a View can data bind to.
    /// <para>
    /// Use the <strong>mvvminpc</strong> snippet to add bindable properties to this ViewModel.
    /// </para>
    /// <para>
    /// You can also use Blend to data bind with the tool's support.
    /// </para>
    /// <para>
    /// See http://www.galasoft.ch/mvvm/getstarted
    /// </para>
    /// </summary>
    public partial class ReadmitPatientListViewModel : ViewModelBase
    {
        /// <summary>
        /// Initializes a new instance of the ReadmitPatientListViewModel class.
        /// </summary>

        ////public override void Cleanup()
        ////{
        ////    // Clean own resources if needed

        ////    base.Cleanup();
        ////}

        #region Declarations

        ICommand _openSurveyCommand;
        Messenger _messenger = Messenger.Default;

        #endregion

        #region Command Properties
        public ICommand OpenSurveyCommand
        {
            get
            {
                if (_openSurveyCommand == null)
                {
                    _openSurveyCommand = new RelayCommand(() => OnSurveyCommandExecute());
                }
                return _openSurveyCommand;
            }
            private set { }
        }
        #endregion

        #region Command Methods
        private void OnSurveyCommandExecute()
        {
            Wait.Begin("Loading Patient List...");
            _messenger.Send<ReadmitPatientListViewModel>(this);
            _messenger.Send<Messages.NavigationRequest<SubClasses.URI.PageURI>>(GetNavRequest_QUESTIONAIRRESHELL());

        }
        #endregion

        #region Properties

        #endregion


        private static Messages.NavigationRequest<SubClasses.URI.PageURI> GetNavRequest_QUESTIONAIRRESHELL()
        {
            Messages.NavigationRequest<SubClasses.URI.PageURI> navRequest =
                new Messages.NavigationRequest<SubClasses.URI.PageURI>(
                    new SubClasses.URI.PageURI(Helpers.PageLinks.QUESTIONAIRRESHELL, System.UriKind.Relative));
            return navRequest;
        }

        partial void OnCreated()
        {

        }
    }
}
使用System.Windows.Input;
使用GalaSoft.MvvmLight;
使用GalaSoft.MvvmLight.Command;
使用GalaSoft.MvvmLight.Messaging;
使用波长is.Silverlight.Core.Helpers;
命名空间ReadmissionTrackingApplication.Client.ViewModel
{
/// 
///此类包含视图可以绑定到的属性。
/// 
///使用mvvminpc代码段将可绑定属性添加到此ViewModel。
/// 
/// 
///还可以在工具的支持下使用Blend进行数据绑定。
/// 
/// 
///看http://www.galasoft.ch/mvvm/getstarted
/// 
/// 
公共部分类ReadmitPatientListViewModel:ViewModelBase
{
/// 
///初始化ReadmitPatientListViewModel类的新实例。
/// 
////公共覆盖无效清除()
////{
//////如果需要,清理自己的资源
////base.Cleanup();
////}
#区域声明
ICommand_openSurveyCommand;
Messenger _Messenger=Messenger.Default;
#端区
#区域命令属性
公共ICommand和OpenSurveyCommand
{
得到
{
if(_openSurveyCommand==null)
{
_openSurveyCommand=新的RelayCommand(()=>OnSurveyCommandExecute());
}
返回openSurveyCommand;
}
私有集{}
}
#端区
#区域命令方法
SurveyCommandExecute()上的私有无效
{
等待。开始(“加载患者列表…”);
_信使。发送(此);
_Send(GetNavRequest_QUESTIONAIRRESHELL());
}
#端区
#区域属性
#端区
private static Messages.NavigationRequest GetNavRequest\u QUESTIONAIRRESHELL()的私有静态消息
{
Messages.NavigationRequest导航请求=
新消息。导航请求(
新的子类.URI.PageURI(Helpers.PageLinks.QUESTIONAIRRESHELL,System.UriKind.Relative));
返回导航请求;
}
部分void OnCreated()
{
}
}
}

搜索完成后,默认情况下是否可以选择第一行?实际修复涉及一些代码混乱,我将实际结果列表对象移动到viewModels集合中,并将按钮命令的代码放在该viewModel中,而不是父VM中。这允许更大的灵活性。