2017-08-14 11 views
-3

データの制御を担当するViewModelを使用してコントロールを更新しようとしています。DataTemplate内のXAMLアクセスコントロール

<ListBox x:Name="OrdersList" ItemsSource="{Binding Orders, Mode=TwoWay }" > 
     <ListBox.ItemTemplate x:Uid="orderListBoxItemTemplate"> 
      <DataTemplate x:Name="orderListBoxDataTemplate"> 
       <materialDesign:Card Padding="20" Margin="5"> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="5*"/> 
          <ColumnDefinition Width="5*"/> 
         </Grid.ColumnDefinitions> 
         <StackPanel Grid.Column="0" Margin="0 0 50 0"> 
          <TextBlock Text="{ Binding OrderNumber, Mode=OneWay }" FontSize="18" Style="{DynamicResource MaterialDesignTitleTextBlock}" /> 
          <TextBlock Text="{ Binding Supplier, Mode=TwoWay }" FontSize="18" Style="{DynamicResource MaterialDesignTitleTextBlock}" /> 
          <TextBlock Text="{ Binding DeliveryDate, Mode=TwoWay }" FontSize="18" Style="{DynamicResource MaterialDesignTitleTextBlock}" /> 
          <TextBlock Text="{ Binding Note, Mode=TwoWay }" FontSize="18" Style="{DynamicResource MaterialDesignTitleTextBlock}" /> 
         </StackPanel> 
         <local:ContactView x:Name="ContactViewItem" Grid.Column="1"/> 
        </Grid> 
       </materialDesign:Card> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

私がコントロールにアクセスするにはどうすればよい「ContactViewItem」:しかし、私はListBox-> ListBoxItem.ItemTemplate-> DataTemplate->コントロールで設定している層を介して制御にアクセスする方法がわかりません私のXAMLを再構成する必要はありませんか?

+0

コントロールをどこから更新しますか? – mm8

+0

xamlにリンクされている.csコードから – Felix

+0

なぜそれをしたいですか? ContactViewコントロールで正確に何をしたいですか? – mm8

答えて

0

ビューモデルは、ビュー内の一部のコントロールにアクセスしたり、何らかの知識を持ってはいけません。これは、MVVMパターンとそれが何を意味するかを壊します。

代わりに、ContactViewコントロールのプロパティをビューモデルのプロパティにバインドする必要があります。

あなたのカスタムコントロールまたはUserControlの場合は、たとえば、コードビハインドで依存関係プロパティを定義し、ビューモデルのプロパティまたはOrderクラスにバインドすることができます。その後、後者のロジックを処理する必要があります。