У меня есть пользовательский элемент управления с DataTemplate внутри. В DataTemplate есть флажок, к которому я хочу привязать команду. Я создал свойство зависимости для привязки команды, но я не могу определить правильный синтаксис XAML для привязки команды из XAML в представлении к флажку в пользовательском элементе управления. Затем сам пользовательский элемент управления используется в DataTemplate в представлении. Я ищу лучший способ привязать команду из модели представления к этому пользовательскому элементу управления. Независимо от того, как я go об этом, я не могу успешно привязать команду.
Пользовательский элемент управления XAML
<UserControl
...
x:Name="orderTreeItemControl"
mc:Ignorable="d">
<UserControl.Resources>
<DataTemplate x:Name="LocationTemplate" x:DataType="model:Location">
<StackPanel Orientation="Horizontal">
<CheckBox Command="{}" IsChecked="{x:Bind IsSelected, Mode=TwoWay}" Padding="5" MinWidth="0" />
<TextBlock Text="{x:Bind LocationName}" Margin="{StaticResource XXSmallTopRightBottomMargin}" />
...
</StackPanel>
</DataTemplate>
...
</UserControl.Resources>
<Grid>
<ContentControl x:Name="MainContent"/>
</Grid>
</UserControl>
Код пользовательского элемента управления позади:
public static readonly DependencyProperty CommandProperty = DependencyProperty.Register("Command1", typeof(ICommand), typeof(OrderTreeItemControl), new PropertyMetadata(null, new PropertyChangedCallback(Data_Changed)));
public ICommand Command1
{
get { return (ICommand)GetValue(CommandProperty); }
set { SetValue(CommandProperty, value); }
}
Просмотр XAML
<Page.Resources>
<DataTemplate x:Key="BaseTemplate" x:DataType="model:OpenOrdersBase">
<winui:TreeViewItem
ItemsSource="{x:Bind Children}"
IsExpanded="{x:Bind IsExpanded, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<controls1:OrderTreeItemControl Command1="{Binding DataContext.PickToggle, RelativeSource={RelativeSource Mode=Self} }" Data="{Binding}">
</controls1:OrderTreeItemControl>
</winui:TreeViewItem>
</DataTemplate>
Обновление:
Я попытался применить решение, предложенное Файвангом, и попытался привязать свойство Command1 к представлению двумя разными способами. Он по-прежнему не связывает команду правильно.
Просмотр попытки XAML 1:
<Page.Resources>
<DataTemplate x:Key="BaseTemplate" x:DataType="model:OpenOrdersBase">
<winui:TreeViewItem
ItemsSource="{x:Bind Children}"
IsExpanded="{x:Bind IsExpanded, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<controls1:OrderTreeItemControl Command1="{Binding DataContext.PickToggle, RelativeSource={RelativeSource Mode=Self} }" Data="{Binding}">
</controls1:OrderTreeItemControl>
</winui:TreeViewItem>
</DataTemplate>
Просмотр попытки XAML 2 (добавлено x: имя на страницу):
<Page.Resources>
<DataTemplate x:Key="BaseTemplate" x:DataType="model:OpenOrdersBase">
<winui:TreeViewItem
ItemsSource="{x:Bind Children}"
IsExpanded="{x:Bind IsExpanded, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<controls1:OrderTreeItemControl Command1="{Binding ElementName=PickSheetManager, Path=ViewModel.PickToggle}" Data="{Binding}">
</controls1:OrderTreeItemControl>
</winui:TreeViewItem>
</DataTemplate>