将Clicker绑定到DataTemplate UWP中的VM

时间:2018-05-04 12:40:49

标签: c# binding uwp

我有导航视图,我定义了CommandBar。在CommandBar中,实现了两个AppBarButton:

TypeError: deal() missing 1 required positional argument: 'face_value'

我想用ViewModel中的方法绑定AppBarButtons,但我不能这样做。我试着这样做:

        <NavigationView x:Name="NavView">
            <NavigationView.HeaderTemplate>
                <DataTemplate>
                    <Grid Margin="24,10,0,0">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>
                        <TextBlock
                            Margin="0,0,0,10"
                            VerticalAlignment="Bottom"
                            FontSize="28"
                            Style="{StaticResource TitleTextBlockStyle}"
                            Text="{Binding}" />
                        <CommandBar
                            Grid.Column="1"
                            Margin="0,0,10,0"
                            HorizontalAlignment="Right"
                            VerticalAlignment="Bottom"
                            DefaultLabelPosition="Right">
                            <AppBarButton
                                Icon="Edit"
                                Label="Feedback" />
                            <AppBarButton
                                Icon="OtherUser"
                                Label="ChangeUser" />
                        </CommandBar>
                    </Grid>
                </DataTemplate>
            </NavigationView.HeaderTemplate>

但这不起作用。编译时出现错误:对象引用未设置为对象的实例。 我尝试添加到<AppBarButton Icon="Edit" Label="Feedback" Click="{x:Bind ViewModel.Foo}"/> ,并绑定到这样的方法:

<DataTemplate x:DataType>

它已编译,但在运行时抛出异常并消失了导航标题。 请告诉我,我如何将这个AppBarButtons绑定到我的方法?

1 个答案:

答案 0 :(得分:0)

如果您想使用x:bind绑定HeaderTemplate中的按钮,您应该找到datacontext并绑定ViewModel。

尝试新建一个ViewModel并将其设置为datacontext。

public class ViewModel
{
    public void Foo()
    {
    }
}


    public MainPage()
    {
        this.InitializeComponent();

        DataContext = new ViewModel();
    }

您需要添加dataType inhead。

DataTemplate x:DataType="local:ViewModel"

以下xaml中的所有代码。

    <NavigationView x:Name="NavView">
        <NavigationView.HeaderTemplate>
            <DataTemplate x:DataType="local:ViewModel">
                <Grid Margin="24,10,0,0">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>
                    <TextBlock
                        Margin="0,0,0,10"
                        VerticalAlignment="Bottom"
                        FontSize="28"
                        Style="{StaticResource TitleTextBlockStyle}"
                        Text="{Binding}" />
                    <CommandBar
                        Grid.Column="1"
                        Margin="0,0,10,0"
                        HorizontalAlignment="Right"
                        VerticalAlignment="Bottom"
                        DefaultLabelPosition="Right">
                        <AppBarButton
                            Icon="Edit"
                            Label="Feedback" 
                            Click="{x:Bind Foo}"/>
                        <AppBarButton
                            Icon="OtherUser"
                            Label="ChangeUser" 
                            Click="{x:Bind Foo}"/>
                    </CommandBar>
                </Grid>
            </DataTemplate>
        </NavigationView.HeaderTemplate>
        </NavigationView>

请按F5运行。

enter image description here

当您单击反馈时,您可以看到xaml调用Foo。

enter image description here