问题描述
我设计了如果用户点击listviewitem,sidemenu加载并显示一些数据
你可以看到上面第一个屏幕截图侧边菜单没有隐藏,如果我点击列表视图项,侧边菜单会改变第二个屏幕截图
<ContentPage.Content>
<xct:SideMenuView State="{Binding SideMenuState}" xct:SideMenuView.MenuGestureEnabled="False" xct:SideMenuView.Position="MainView">
<ListView x:Name="lvMonitoring" SeparatorVisibility="None" HasUnevenRows="True" Margin="0,5,0"
SelectedItem="{Binding SelectedChannel}" ItemsSource="{Binding TargetChannelList}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="model:Channel">
<ViewCell>
<Frame CornerRadius="5" Margin="4" HasShadow="True" Padding="0">
<Grid BackgroundColor="{Binding Status,Converter={StaticResource Key=StatusToColorConverter}}" HeightRequest="60">
<Grid.ColumnDeFinitions>
<ColumnDeFinition Width="0.6*"/>
<ColumnDeFinition Width="0.4*"/>
</Grid.ColumnDeFinitions>
<Grid Grid.Column="0" HorizontalOptions="Start" VerticalOptions="Center" Margin="10,0">
<StackLayout>
<Label Text="{Binding displayName}" Style="{StaticResource DefaultLabel}"/>
</StackLayout>
</Grid>
<Grid Grid.Column="1" Margin="0,15,0" HorizontalOptions="End" VerticalOptions="Center">
<Label Text="{Binding Status,Converter={StaticResource Key=StatusToTextConverter}}" />
</Grid>
</Grid>
</Frame>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<xct:TabView xct:SideMenuView.Position="RightMenu"
xct:SideMenuView.MenuWidthPercentage=".7">
<xct:TabViewItem Text="">
<Button Text=""/>
</xct:TabViewItem>
<xct:TabViewItem Text="">
<Grid>
<Grid.RowDeFinitions>
<RowDeFinition Height="0.1*"/>
<RowDeFinition Height="0.9*"/>
</Grid.RowDeFinitions>
<Grid Grid.Row="0">
<Grid.ColumnDeFinitions>
<ColumnDeFinition Width="0.4*"/>
<ColumnDeFinition Width="0.4*"/>
<ColumnDeFinition Width="0.2*"/>
</Grid.ColumnDeFinitions>
</Grid>
<ListView Grid.Row="1" ItemsSource="{Binding NotificationHistoryList}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="model:NotificationHistory">
<ViewCell>
<Frame HasShadow="True" CornerRadius="4" Margin="4" Padding="0">
<Grid>
<Grid.ColumnDeFinitions>
<ColumnDeFinition Width="0.4*"/>
<ColumnDeFinition Width="0.4*"/>
<ColumnDeFinition Width="0.2*"/>
</Grid.ColumnDeFinitions>
<Label Grid.Column="0" Text="{Binding DetailLocation}" Style="{StaticResource DefaultLabel}"/>
<Label Grid.Column="1" Text="{Binding NotificationReceivedDateTime,StringFormat='{MM월-dd일 HH시 mm분 ss초}'}" Style="{StaticResource DefaultLabel}"/>
<Label Grid.Column="2" Text="{Binding NotificationStatus,Converter={StaticResource Key=StatusToTextConverter}}"
TextColor="{Binding NotificationStatus,Converter={StaticResource Key=StatusToColorConverter}}"/>
</Grid>
</Frame>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</xct:TabViewItem>
</xct:TabView>
</xct:SideMenuView>
</ContentPage.Content>
上面的代码是我的xaml代码,我想知道解决方案。 如果我忘记设置属性或设置,请告诉我
复制仓库:https://github.com/Sunday5214/XamarinXAMLExamples
解决方法
最好初始化状态属性:
private SideMenuState state = SideMenuState.MainViewShown;
在应用程序启动期间,SelectedItem
的 setter 被空值命中,因此最好进行检查以避免将 State
属性设置为 SideMenuState.RightMenuShown
:
public string SelectedItem
{
get => selectedItem;
set
{
SetProperty(ref selectedItem,value);
if (value != null)
{
State = SideMenuState.RightMenuShown;
}
}
}