2012-08-01 2 views
0

나는 Listbox가있는 UserControl을가집니다. 이 UserControl을 Mainpage.xaml에 넣습니다. 이 UserControl을 다른 페이지에 사용하고 응답이 달라지기 때문에 usercontrol.xaml.cs 대신 Mainpage.xaml.cs에서 선택한 및 단추 클릭 이벤트를 처리하고 싶습니다. 내가 어떻게 해? 예를 들어 주시거나 나에게 링크 해 주시겠습니까? 미리 감사드립니다.이벤트에 대한 코드 숨김 UserControl이 아닌 Mainpage에서 실행

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
     <StackPanel> 
      <my:QueueListControl /> 
      </StackPanel> 
    </Grid> 
</Grid> 

내가에서 MainPage.xaml에 LST의 데이터를 결합 할 수 있어요 :에서 MainPage.xaml에서 UserControl을 추가하는 코드가

<UserControl x:Class="CMSPhoneApp.QueueListControl" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" 
FontFamily="{StaticResource PhoneFontFamilyNormal}" 
FontSize="{StaticResource PhoneFontSizeNormal}" 
Foreground="{StaticResource PhoneForegroundBrush}" 
d:DesignHeight="480" d:DesignWidth="480" 
xmlns:local="clr-namespace:CMSPhoneApp" > 

<UserControl.Resources> 
    <Style x:Key="ScrollViewerStyle1" TargetType="ScrollViewer"> 
     <Setter Property="VerticalScrollBarVisibility" Value="Auto"/> 
     <Setter Property="HorizontalScrollBarVisibility" Value="Disabled"/> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="Padding" Value="0"/> 
     <Setter Property="BorderThickness" Value="0"/> 
     <Setter Property="BorderBrush" Value="Transparent"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ScrollViewer"> 
        <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="ScrollStates"> 
           <VisualStateGroup.Transitions> 
            <VisualTransition GeneratedDuration="00:00:00.5"/> 
           </VisualStateGroup.Transitions> 
           <VisualState x:Name="Scrolling"> 
            <Storyboard> 
             <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="VerticalScrollBar"/> 
             <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="HorizontalScrollBar"/> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="NotScrolling"/> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 
         <Grid Margin="{TemplateBinding Padding}"> 
          <ScrollContentPresenter x:Name="ScrollContentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}"/> 
          <ScrollBar x:Name="VerticalScrollBar" HorizontalAlignment="Right" Height="Auto" IsHitTestVisible="False" IsTabStop="False" Maximum="{TemplateBinding ScrollableHeight}" Minimum="0" Opacity="0" Orientation="Vertical" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{TemplateBinding VerticalOffset}" ViewportSize="{TemplateBinding ViewportHeight}" VerticalAlignment="Stretch" Width="5" BorderBrush="#FF2022BC"/> 
          <ScrollBar x:Name="HorizontalScrollBar" HorizontalAlignment="Stretch" Height="5" IsHitTestVisible="False" IsTabStop="False" Maximum="{TemplateBinding ScrollableWidth}" Minimum="0" Opacity="0" Orientation="Horizontal" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{TemplateBinding HorizontalOffset}" ViewportSize="{TemplateBinding ViewportWidth}" VerticalAlignment="Bottom" Width="Auto"/> 
         </Grid> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 


    <local:VisibilityConverter x:Key="VisibilityConverter"/> 
    <local:ColumSpanConverter x:Key="ColumSpanConverter"/> 
</UserControl.Resources> 


<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 

    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 

     <ScrollViewer Style="{StaticResource ScrollViewerStyle1}" Background="#00E23162"> 
      <ListBox x:Name="lstCall" HorizontalAlignment="Left" Margin="6,6,0,0" VerticalAlignment="Top" Width="400" SelectionChanged="lstCall_SelectionChanged" > 
       <ListBox.ItemTemplate> 
        <DataTemplate> 

         <Grid x:Name="grdQueue" Background="Transparent"> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="70"/>         
          </Grid.RowDefinitions> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="35" />           
           <ColumnDefinition Width="100*"/> 
           <ColumnDefinition Width="125" /> 
          </Grid.ColumnDefinitions> 
          <Image Source="{Binding Type}" Grid.Row="0" Grid.Column="0"/> 
          <TextBlock Grid.Row="0" Grid.Column="1" Grid.ColumnSpan= "{Binding isSpan, Converter={StaticResource ColumSpanConverter}}" Text="{Binding summary}" TextWrapping="Wrap" 
              Style="{StaticResource PhoneTextAccentStyle}" /> 
          <Button Grid.Row="0" Grid.Column="3" ClickMode="Press" Click="Action_Click" Style="{StaticResource ButtonStyle1}" 
              Visibility="{Binding isVisibility, Converter={StaticResource VisibilityConverter}}"> 
           <Button.Content> 
            <TextBlock Width="85" Height="70" Text="{Binding ActionCaption}" 
                 Style="{StaticResource LabelStyle_20}"  /> 
           </Button.Content> 
          </Button> 

         </Grid> 

        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 
     </ScrollViewer> 
    </Grid> 
</Grid> 
</UserControl> 

있습니다 :

내 UserControl에있다 다음 코드에 의해 .cs :

MyQueue = new List<QueueItem>(); 
     MyQueue.Add(new QueueItem { summary = "Test1tqeewwewew332233 3233322323 wdqwqwqwqwq", status = "Open", callNumber = "1" }); 
     MyQueue.Add(new QueueItem { summary = "Test1tqeewwewew332233 3233322323 wdqwqwqwqwq", status = "Responded", callNumber = "2" }); 
     MyQueue.Add(new QueueItem { summary = "Test1tqeewwewew332233 3233322323 wdqwqwqwqwq", status = "Resolved", callNumber = "3" }); 
     MyQueue.Add(new QueueItem { summary = "Test1tqeewwewew332233 3233322323 wdqwqwqwqwq", status = "transfer", callNumber = "4" }); 
     MyQueue.Add(new QueueItem { summary = "Test1tqeewwewew332233 3233322323 wdqwqwqwqwq", status = "Complete", callNumber = "5" }); 
     test.lst.ItemsSource = MyQueue; 

답변

0

하나의 솔루션이 MVVM Light와 같은 라이브러리를 사용하는 것입니다; UserControl의 코드에서 메시지를 보내는 데 사용할 수있는 Messenger 클래스 (tutorial)가 있습니다.

MainControl에서 UserControl의 메시지와 'OnNavigatedFrom` 메서드의 등록은 메시지 수신을 취소합니다. 이 UserControl을 사용하려는 다른 페이지에서도 동일한 작업을 수행 할 수 있습니다.

UserControl에 의해 시작된 메시지에는 각 클래스가 적절하게 반응하는 데 필요한 모든 관련 정보가 포함되어야합니다. 따라서 컨트롤의 코드 숨김을 사용자 상호 작용 논리와 분리 할 수 ​​있습니다.

+0

는 개인적으로 내가 더 복잡성을 추가 생각하지 않는다 MVVM 프레임 워크를 통해,이 사람을 도움이 될 것입니다. 그것은 단순히 UserControl에 대한 적절한 인터페이스를 만드는 경우입니다. – ColinE

0

UserControl은 컨트롤의 인스턴스를 호스팅하는 컨트롤에 의해 업데이트되거나 처리 될 수 있도록 상태 및 이벤트를 노출하여 더 재사용 할 수 있도록해야합니다. 자세한 내용은이 자습서를 참조하십시오 :

A Simple Pattern for Creating Re-useable UserControls in WPF/Silverlight

+0

감사합니다. 내 UserControl mdoifed. 그러나 MyMoldeView에서 Click 이벤트를 수행하는 방법을 아직 모릅니다. 너가 그것을 지적하거나 저에게 연결을 보내겠습니까? 감사. – user819774