2016-10-03 8 views
0

나는 사용자가 "큰"형태로 편집 할 수있는 응용 프로그램에서 작동 :UWP - ContentPresenter의 요소를 기본 ViewModel에 바인딩하는 방법?

  • 양식은 필드를 많이 포함이 각 PivotItem이의 범주를 나타내는 피벗에 표시됩니다 형태.
  • 일부 카테고리에는 하나 이상의 하위 항목이 포함되어 있습니다. Master-Detail 프레젠테이션을 통해 표시됩니다.

내가 모델에 직접 바인더 제본 된 ContentPresenter에를 사용하여 상세 부분의 항목을 표시하려면 :

<ContentPresenter 
    x:Name="DetailContentPresenter" 
    Grid.Column="1" 
    Grid.RowSpan="2" 
    BorderThickness="1,0,0,0" 
    Padding="24,0" 
    BorderBrush="{ThemeResource SystemControlForegroundBaseLowBrush}" 
    Content="{x:Bind MasterListView.SelectedItem, Mode=OneWay}"> 

    <ContentPresenter.ContentTemplate> 
     <DataTemplate x:DataType="models:Form_Parts"> 
      <...> 
     </DataTemplate> 
    </ContentPresenter.ContentTemplate> 
</ContentPresenter> 

이 잘 작동하지만, "세 번째"레벨은에있다 기본 양식 : GridView을 통해 ContentPresenter에 표시되는 사진 목록입니다. 이것은 훌륭하게 작동하지만 "Add"버튼이나 "ItemClick"이벤트를 사용하여 사진과 상호 작용하고 싶습니다. ContentPresenter의 DataContext 대신 기본 ViewModel에서 Command를 바인딩하는 방법을 알지 못합니다. 이 형식의 다른 필드는이 ViewModel에 잘 바인딩됩니다.

내가했던 어떤 결과없이 몇 가지 테스트 :

<StackPanel Orientation="Horizontal" Grid.Row="1"> 
    <GridView ItemsSource="{Binding images}" 
       ItemClick="{Binding PhotoClickCommand}"> 
     <GridView.ItemTemplate> 
      <DataTemplate> 
       <Border BorderBrush="Gray" BorderThickness="1" 
         Padding="10" 
         Height="150" Width="190"> 
        <Image Stretch="UniformToFill" 
          Source="{Binding bitmap_image}" /> 
       </Border> 
      </DataTemplate> 
     </GridView.ItemTemplate> 
    </GridView> 
    <Border BorderBrush="Gray" BorderThickness="1" 
      Padding="10" 
      Height="150" Width="190"> 
     <Button Command="{Binding Path=DataContext.AddPhotoCommand, ElementName=DetailsPage}" 
       Height="100" Width="100"> 
      <Viewbox> 
       <SymbolIcon Symbol="Add"/> 
      </Viewbox> 
     </Button> 
    </Border> 
</StackPanel> 

=>이 일을하는 방법이 있나요?

편집 : 내가 함께 "추가"버튼 덕분에 Alteik 내 문제를 해결 :

<Button Command="{Binding ElementName=Root, Path=DataContext.AddPhotoCommand}" Height="100" Width="100"> 

하지만 항상 의 GridView대해서 itemClick에 문제가 얻을. 내가하고자하는 반면, 보낸 사람이 현재 Form_Parts합니다 (ContentPresenter에의 DataTemplate을)입니다

private void EditPhoto(object sender) 
{ 
    Images sImage = (Images)sender; 
    if (sImage != null) 
    { 
     NavigationService.NavigateTo<CommentImageViewModel>(this, new Object[] { sImage }, true); 
    } 
} 

:이 시도 :

<GridView ItemsSource="{Binding images}" 
      IsItemClickEnabled="True" 
      SelectionMode="None"> 
    <i:Interaction.Behaviors> 
     <core:EventTriggerBehavior EventName="Tapped"> 
      <core:InvokeCommandAction Command="{Binding ElementName=Root, Path=DataContext.EditPhotoCommand}" 
             CommandParameter="{Binding Mode=OneWay}"/> 
     </core:EventTriggerBehavior> 
    </i:Interaction.Behaviors> 
    <...> 
</GridView> 

을하지만 뷰 모델의 예상 매개 변수를하지 않습니다 GridView에 바인딩 된 내 이미지 컬렉션의 선택한 항목을 가져옵니다. ...

=>이 문제를 해결하려면 어떻게해야합니까?

답변

1

당신은이 일을 자식 요소에 DataContext를 변경 할 수 있어야한다 :

Command"{Binding ElementName=Root, Path=DataContext.TheCommandFromRoot}" 

은 분명히 당신이 그것을 잘 작동

+0

감사를 부모의 요소 "루트"의 이름을 설정해야 ! –

+0

감사합니다. 도움이 되었으면 대답을 선택하십시오 :) – Ateik

+0

예,하지만 같은 질문이 있습니다. GridView의 클릭 된 항목을 가져와야합니다. 로 연주하려고했지만 클릭 한 항목을 매개 변수로 전달하지 않았습니다 ... 아이디어가 있습니까? 아니면이 질문에 대한 새로운 주제를 만들어야합니까? –