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