У меня есть Canvas с пользовательскими элементами управления. Теперь я хочу, чтобы их можно было выбирать, поскольку я хочу иметь окно свойств, в котором отображается информация об этом конкретном элементе. Было бы неплохо иметь что-то по пути, когда я нажимаю UserControl в Canvas, свойство SelectedItem может быть установлено на viewmodel этого usercontrol или что-то лучше Я просто не имею ни малейшего понятия, как это сделать хорошо, и я не смог заставить его работать каким-либо образом, поэтому я спрашиваю здесь.
В настоящее время у меня есть DocumentViewModel, которая содержит информацию об открытом документе / проекте. В этой модели представления у меня есть список компонентов, которые представлены на холсте. Это выглядит примерно так:
public class DocumentViewModel : BaseViewModel
{
private ObservableCollection<ComponentViewModel> components;
public ObservableCollection<ComponentViewModel> Components
{
get { return components; }
}
private string filePath;
public string FilePath
{
get { return filePath; }
set { filePath = value; }
}
...
}
Тогда у меня есть DataTemplate для того, как DocumentViewModel должен выглядеть в представлении. Это выглядит так:
<DataTemplate DataType="{x:Type ViewModels:DocumentViewModel}">
<DataTemplate.Resources>
<Converters:GuiSizeConverter x:Key="SizeConverter"/>
</DataTemplate.Resources>
<ItemsControl ItemsSource="{Binding Components}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas ClipToBounds="True" Height="{Binding CurrentProject.Height, Converter={StaticResource SizeConverter}}"
Width="{Binding CurrentProject.Width, Converter={StaticResource SizeConverter}}"
HorizontalAlignment="Left" VerticalAlignment="Top">
<Canvas.Background>
<SolidColorBrush Color="{DynamicResource {x:Static SystemColors.WindowFrameColorKey}}"/>
</Canvas.Background>
</Canvas>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Utils:DraggableExtender.CanDrag" Value="True" />
<Setter Property="Canvas.Top" Value="{Binding Path=Y, Converter={StaticResource SizeConverter},Mode=TwoWay}" />
<Setter Property="Canvas.Left" Value="{Binding Path=X, Converter={StaticResource SizeConverter},Mode=TwoWay}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</DataTemplate>
ComponentViewModel - это базовый класс для моих компонент ViewModels, которые являются простыми обертками вокруг моих объектов Model. Я использую DataTemplates, чтобы связать их с View, поэтому ничего особенного там нет.
Так есть ли у кого-нибудь хорошие предложения о том, как сделать эти элементы управления кликабельными, чтобы я мог определить, какой из них выбран, и связать его с полем свойств?