해결 방법에는 여러 가지가 있습니다. 하지만 아마도 ListBox와 함께 작업하고 바인딩하는 것이 가장 간단 할 것입니다. ListBox에는 바인딩 가능한 ItemsSource와 현재 선택된 항목이있는 SelectedItem 속성이 있으므로 또한 .cs 파일 뒤에있는 코드에서 무언가를하고 싶다면 선택이 변경되면 SelectionChanged 이벤트를 호출합니다.
뷰 모델에서 ObservableCollection을 유지하여 MVVM을 유지하는 것이 좋습니다.
ListBox의 스타일이나 배치가 템플릿을 사용자의 필요에 더 잘 맞는 것으로 덮어 쓰지 않는 경우.
위의 방법으로 문제를 해결할 수 있지만 간단하게 유지하는 것이 좋습니다.
UPDATE는
이 뷰를 구축 할 방법이다. ItemsPanel 특성은 항목을 배치 할 Canvas를 지정하는 UserControl.Resources 섹션의 정의 된 ItemsPanelTemplate에 바인딩됩니다. 그 캔버스 자체가 런타임에 주위에 사용자의 이동 컨트롤을 할 수있는 논리를 가지고 있지 않지만보기 모델
public class View1Model
{
private ObservableCollection<SomeModel> _DataModelCollection;
public ObservableCollection<SomeModel> DataModelCollection
{
get { return this._DataModelCollection; }
set { this._DataModelCollection = value; }
}
}
에
<UserControl
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"
mc:Ignorable="d"
xmlns:local="clr-namespace:SilverlightApplication1"
x:Class="SilverlightApplication1.View1"
d:DesignWidth="640" d:DesignHeight="480">
<UserControl.Resources>
<local:View1Model x:Key="View1ModelDataSource" />
<ItemsPanelTemplate x:Key="ItemsPanelTemplate1">
<Canvas />
</ItemsPanelTemplate>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" DataContext="{Binding Source={StaticResource View1ModelDataSource}}">
<ListBox Margin="80,85,183,54" ItemsPanel="{StaticResource ItemsPanelTemplate1}" ItemsSource="{Binding DataModelCollection}"/>
</Grid>
그것은 주목해야한다.
오 그래, 여러 선택된 모델을 사용할 수 없습니다. – Andreas
캔버스에 뷰를 어떻게 추가합니까? –
Window.Resources에서 DataType을 지정하는 DataTemplate을 정의합니다. "SomeModel"이 SomeUsercontrol로 표시되어야합니다. 그런 다음 Canvas ItemsSource를 모든 모델을 포함하는 ObservableCollection에 바인딩합니다. –
Andreas