Xaml UWP中数据模板内部的数据绑定

Xaml UWP中数据模板内部的数据绑定,xaml,uwp,datatemplate,Xaml,Uwp,Datatemplate,我有一个usercontrol,如下所示,它有DataTemplate。我想将DataTemplate中的数据绑定到DataContext中的属性。令人沮丧的是,在Uwp中,他们没有祖先类型,我如何才能使我的东西工作。我已经参考了这篇文章,但它不起作用。请帮忙 用户控制: <local:CommonExpanderUserControl> <local:CommonExpanderUserControl.ExpanderContent> <DataTemplate

我有一个usercontrol,如下所示,它有DataTemplate。我想将DataTemplate中的数据绑定到DataContext中的属性。令人沮丧的是,在Uwp中,他们没有祖先类型,我如何才能使我的东西工作。我已经参考了这篇文章,但它不起作用。请帮忙

用户控制:

<local:CommonExpanderUserControl>
<local:CommonExpanderUserControl.ExpanderContent>
 <DataTemplate x:DataType="Data:VmInstrumentSettingsLocal">
<StackPanel>
<TextBlock Text="{Binding LisLocalSettings.SomeText}"/>
<controls:ButtonBadged x:Name="ButtonApplyLisLocalChanges" Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2"
                                               x:Uid="/Application.GlobalizationLibrary/Resources/InstrumentSettingsViewButtonApply"
                                               HorizontalAlignment="Center"
                                               Margin="8"
                                               Command="{Binding LisLocalSettings.SaveLisSettings}"/>
</StackPanel>
</DataTemplate>
</local:CommonExpanderUserControl.ExpanderContent>
</CommonExpanderUserControl>
UWP中数据模板内部的数据绑定

您可以在数据源中放置
命令
,但如果数据源是集合,则需要实现多个命令实例。一般来说,我们将命令放在可以重用的当前DataContext中。有关详细步骤,请参考以下内容

<Page.Resources>
    <DataTemplate x:Key="HeaderTemplate">
        <StackPanel
            x:Name="ExpanderHeaderGrid"
            Margin="0"
            Padding="0"
            HorizontalAlignment="Stretch"
            Background="Red"
            Orientation="Vertical"
            >
            <TextBlock x:Name="TextBlockLisSharedSettingsTitle" Text="{Binding}" />
            <Button Command="{Binding ElementName=RootGrid, Path=DataContext.BtnCommand}" Content="{Binding}" />
        </StackPanel>
    </DataTemplate>
</Page.Resources>
<Grid x:Name="RootGrid">
    <uwpControls:Expander Header="hello" HeaderTemplate="{StaticResource HeaderTemplate}" />
</Grid>

代码隐藏

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        this.DataContext = this;
    }
    public ICommand BtnCommand
    {
        get
        {
            return new CommadEventHandler<object>((s) => BtnClick(s));
        }
    }

    private void BtnClick(object s)
    {

    }
}
public class CommadEventHandler<T> : ICommand
{
    public event EventHandler CanExecuteChanged;

    public Action<T> action;
    public bool CanExecute(object parameter)
    {
        return true;
    }

    public void Execute(object parameter)
    {
        this.action((T)parameter);
    }
    public CommadEventHandler(Action<T> action)
    {
        this.action = action;

    }
}
公共密封部分类主页面:第页
{
公共主页()
{
this.InitializeComponent();
this.DataContext=this;
}
公共ICommand BtnCommand
{
得到
{
返回新的CommadEventHandler((s)=>BtnClick(s));
}
}
私有void b单击(对象s)
{
}
}
公共类CommadEventHandler:ICommand
{
公共事件处理程序CanExecuteChanged;
公共行动;
公共布尔CanExecute(对象参数)
{
返回true;
}
public void Execute(对象参数)
{
这个动作((T)参数);
}
公共通讯员(行动)
{
这个动作=动作;
}
}
public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        this.DataContext = this;
    }
    public ICommand BtnCommand
    {
        get
        {
            return new CommadEventHandler<object>((s) => BtnClick(s));
        }
    }

    private void BtnClick(object s)
    {

    }
}
public class CommadEventHandler<T> : ICommand
{
    public event EventHandler CanExecuteChanged;

    public Action<T> action;
    public bool CanExecute(object parameter)
    {
        return true;
    }

    public void Execute(object parameter)
    {
        this.action((T)parameter);
    }
    public CommadEventHandler(Action<T> action)
    {
        this.action = action;

    }
}