2011-04-04 30 views
0

我在HeaderedContentControl的Header中有一個按鈕當我點擊按鈕時,該命令正確觸發,但是因爲實際的listboxitem未被選中,所以我沒有數據可用。如何在首先選擇子控件或與其進行交互時導致HeaderedContentControl被選中?Silverlight HeaderedContentControl.Header焦點問題

這裏是我的控制

<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> 
+0

搜索結束後,默認情況下可以選擇第一行嗎? – 2011-04-05 01:47:52

+0

虐待看看是否修復它... – ecathell 2011-04-05 13:09:04

+0

實際的修復涉及到一些代碼洗牌,我將實際結果列表對象移動到viewModels的集合中,並將按鈕命令的代碼放在該viewModel中,而不是父VM。這允許更多的靈活性。 – ecathell 2011-04-11 20:01:39

回答

0

實際修復涉及一些代碼洗牌,我感動的實際結果列表對象插入的ViewModels的集合,把代碼的按鈕命令在視圖模型作爲反對父虛擬機。這允許更多的靈活性。

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() 
     { 

     } 
    } 
} 
+0

這應該允許更容易地使用所有的headered項目控件... – ecathell 2011-04-11 20:04:26