У меня есть свойство canvas в моем классе, и мне было интересно, можно ли связать это с холстом в xaml?Binding to Canvas
Как будет работать привязка данных на холсте?
<Canvas ItemSource="{Binding ClassCanvas}" />
У меня есть свойство canvas в моем классе, и мне было интересно, можно ли связать это с холстом в xaml?Binding to Canvas
Как будет работать привязка данных на холсте?
<Canvas ItemSource="{Binding ClassCanvas}" />
Если вы хотите, чтобы ваш Canvas определен в XAML, чтобы включить весь холст в своем классе в качестве отдельного элемента вы можете написать:
<Canvas>
<ContentPresenter Content="{Binding ClassCanvas}" />
... other items here ...
</Canvas>
Если вы хотите, чтобы ваш Canvas определен в XAML, чтобы включить все же UiElements как Canvas, определенный в вашем классе, невозможно, потому что UIElement может иметь только один родитель UIElement. Поэтому, если Canvas, определенный в классе, является родительским элементом данного UIElement, Canvas, определенный в XAML, не может быть.
Если вы хотите, чтобы ваш Canvas для отображения данных из каждой UIElement в Canvas, определенные в классе, вы можете сделать это с помощью ItemsControl с Canvas панелью и DataTemplate:
<ItemsControl ItemsSource="{Binding ClassCanvas.Children}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl>
<ItemsControl.ItemsContainerStyle>
<Style>
<Setter Property="Canvas.Left" Value="{Binding (Canvas.Left)}" />
<Setter Property="Canvas.Left" Value="{Binding (Canvas.Top)}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
... display of UIElement here, either using VisualBrush or custom display
</ControlTemplate>
<Setter.Value>
</Setter>
</Style>
</ItemsControl.ItemsContainerStyle>
</ItemsControl>
Следует заметить, что этот код будет только сканирование свойства «Дети» один раз, поскольку это не коллекция INotifyCollectionChanged.
Если вы хотите связать свойство в своем классе, которое содержит коллекцию UIElements с установленными свойствами Canvas.Top и Canvas.Left, вы можете легко сделать это, если контейнер представляет собой ObservableCollection вместо Canvas.
Класс Canvas никогда не был предназначен для использования в вашем слое данных. Я настоятельно рекомендую вам переключиться на использование ObservableCollection и использовать Canvas только как часть вашего представления.
Да.
Вы можете привязать к холсту или любому другому объекту.
Просьба предоставить более подробную информацию. – SLaks
Я обновил свой вопрос. – Robert