我有导航视图,我定义了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绑定到我的方法?
答案 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运行。
当您单击反馈时,您可以看到xaml调用Foo。