C # WPF Выберите UserControl на холсте - PullRequest
1 голос
/ 04 апреля 2011

У меня есть 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, поэтому ничего особенного там нет.

Так есть ли у кого-нибудь хорошие предложения о том, как сделать эти элементы управления кликабельными, чтобы я мог определить, какой из них выбран, и связать его с полем свойств?

1 Ответ

1 голос
/ 04 апреля 2011

Вместо использования ItemsControl просто используйте ListBox, у которого есть выбор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...