2017-06-09 10 views
0

私はキャンバス内に任意の数の円を作成するWPFアプリケーションを作成しています。ユーザーは特定の円をクリックして「選択」し、円を大きくすることができます。他のGUI要素も、そのサークルのViewModelの他のデータで更新されます。WPF MVVM - 親ViewModelに動的パラメータを送信

トリックは、1つが選択されているときに他のすべてのサークルを選択解除できる必要があるため、サークルVM自体がselectメソッドを処理できないということです。私はそれを処理できる親VMが必要です - そして、私はパラメータとしてクリックされた特定の円のIDを渡す必要があります。 (私はサークルVMで既に作成このIDプロパティを持っている)

は、ここで私はこれまで持っているものです:

私は、コマンドをトリガするために私の楕円の内側MouseBindingを設定するにはどうすればよい
<Window x:Class="MyApp.MainWindow" 
     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" 
     xmlns:local="clr-namespace:MyApp" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="300" Width="300"> 
    <Window.DataContext> 
     <local:ClientManagerVM/> 
    </Window.DataContext> 
    <Grid> 
     <ScrollViewer x:Name="Scroller" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Background="Black" Grid.RowSpan="1"> 
      <Canvas x:Name="DrawingCanvas" Height="{Binding circlesVM.Height, Mode=OneWay}" Width="{Binding circlesVM.Width, Mode=OneWay}" HorizontalAlignment="Left" VerticalAlignment="Top" Background="Black"> 
       <ItemsControl ItemsSource="{Binding circlesVM.circleList}"> 
        <ItemsControl.ItemsPanel> 
         <ItemsPanelTemplate> 
          <Canvas /> 
         </ItemsPanelTemplate> 
        </ItemsControl.ItemsPanel> 
        <ItemsControl.ItemContainerStyle> 
         <Style TargetType="ContentPresenter"> 
          <Setter Property="Canvas.Left" Value="{Binding x}"/> 
          <Setter Property="Canvas.Top" Value="{Binding y}"/> 
         </Style> 
        </ItemsControl.ItemContainerStyle> 
        <ItemsControl.ItemTemplate> 
         <DataTemplate> 
          <Ellipse Fill="White" Width="{Binding size, Mode=OneWay}" Height="{Binding size, Mode=OneWay}"> 
           <Ellipse.InputBindings> 
            <MouseBinding Gesture="LeftClick" /> 
           </Ellipse.InputBindings> 
          </Ellipse> 
         </DataTemplate> 
        </ItemsControl.ItemTemplate> 
       </ItemsControl> 
      </Canvas> 
     </ScrollViewer> 
    </Grid> 
</Window> 

特定のEllipseのIDのパラメータ値を持つClientManagerVM?

YourCommandは、コマンドパラメータとして円受け入れる「circlesVM」の ICommand財産であるこのような
+0

IをListBoxはすぐに選択肢をサポートしているので、 'ItemsControl'の代わりに' ListBox'に切り替えることをお勧めします。また、MouseBindingには、コマンドをバインドしてトリガするのに十分な、バインド可能なCommandおよびCommandParameterプロパティがあります – ASh

答えて

0

何か:あなたはしかし、別の質問をする前に、このかかわらをお読みください

<Ellipse Fill="White" Width="{Binding size, Mode=OneWay}" Height="{Binding size, Mode=OneWay}"> 
    <Ellipse.InputBindings> 
     <MouseBinding Gesture="LeftClick" 
         Command="{Binding DataContext.circlesVM.YourCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}" 
         CommandParameter="{Binding}" /> 
    </Ellipse.InputBindings> 
</Ellipse> 

https://stackoverflow.com/help/mcve

関連する問題