小编Pok*_*151的帖子

ContextMenu的MenuItem DataContext返回旧项

我在LongListSelector中使用ContextMenu,以便我可以删除绑定到LLS的列表中的一些项目.

我在这里遵循最近的指南以实现LLS(虽然我没有使用JumpList).我唯一改变的是让基组类扩展ObservableCollection而不是List.

我遇到的问题是,一旦我实现了ContextMenu并从那里删除,我可以从可见列表中的相同"位置"删除两次然后它会崩溃.调试显示在第二次删除后,MenuItem的Datacontext返回已删除的上一个项目.所以当我在列表中搜索它时,我得到的索引是-1.我可以抓住这个,但我不知道如何找出真正被选为项目的东西.

contextMenu的我的XAML部分如下:

<phone:LongListSelector.ItemTemplate>
    <DataTemplate>
        <Grid toolkit:TiltEffect.IsTiltEnabled="True">
            <toolkit:ContextMenuService.ContextMenu>
                <toolkit:ContextMenu  x:Name="conmen" Loaded="ContextMenu_Loaded">
                      <toolkit:MenuItem Header="Delete" Click="DeleteItem_Click"/>
                </toolkit:ContextMenu>
            </toolkit:ContextMenuService.ContextMenu>

             <Grid.ColumnDefinitions>
                 <ColumnDefinition Width="Auto"/>
                 <ColumnDefinition Width="*"/>
                 <ColumnDefinition Width="Auto"/>
             </Grid.ColumnDefinitions>

             <Border Grid.Column="0" Background="{StaticResource PhoneInverseBackgroundBrush}" Padding="{StaticResource PhoneTouchTargetOverhang}">
                 <TextBlock Text="{Binding Usr, StringFormat='x{0}'}" FontSize="32" HorizontalAlignment="Left" Width="48"/>
             </Border>

             <Border Grid.Column="1" Background="{StaticResource PhoneInverseBackgroundBrush}" Padding="{StaticResource PhoneTouchTargetOverhang}">
                 <TextBlock Text="{Binding Name}" FontSize="32" HorizontalAlignment="Left" />
             </Border>

             <Border Grid.Column="2" Background="{StaticResource PhoneInverseBackgroundBrush}" Padding="{StaticResource PhoneTouchTargetOverhang}">
                <TextBlock Text="{Binding Type, StringFormat=\{0:C\}}" FontSize="32" HorizontalAlignment="Right" />
             </Border>
        </Grid>
    </DataTemplate>
</phone:LongListSelector.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)

这是删除项目的delete_click函数的开始:

    private void DeleteItem_Click(object sender, RoutedEventArgs e)
    {            
        var …
Run Code Online (Sandbox Code Playgroud)

wpftoolkit windows-phone-8

7
推荐指数
1
解决办法
2374
查看次数

LongListMultiSelector将CheckBox与列表项对齐

我有一个LongListMultiSelector,列表项目的字体较大.由于这种字体更改,我意识到复选框始终与实际列表项不一致.我尝试在每个级别更改水平和垂直对齐,并调整填充和边距值.这些更改了列表项中的文本块,但复选框保持根到顶部,并且它给列表提供了扭曲的外观.

无论如何都要将复选框垂直居中或管理其填充?我意识到最近关于列表样式的边距的帖子,但它似乎相当复杂,没有任何直接输入我的问题.

silverlight-toolkit windows-phone-8

5
推荐指数
1
解决办法
1077
查看次数

H2 内存数据库:使用 JDBC 设置时区?Java 单元测试

我在 h2 上遇到了一个奇怪的困境。我们有一个内存 h2 数据库设置,模式为 Oracle,以帮助我们进行单元测试。我们将应用程序的时区设置为

@PostConstruct
void started() {
    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}
Run Code Online (Sandbox Code Playgroud)

我们将 h2 设置为 maven/springboot 应用程序中的数据源,如下所示:

datasource.config.url=jdbc:h2:mem:AZ;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=ORACLE;
datasource.config.username=sa
datasource.config.password=
datasource.config.driver-class-name=org.h2.Driver
Run Code Online (Sandbox Code Playgroud)

我有一个基于时间戳的测试运行。所以我写了这个小映射器来从 h2 获取数据库时间:

@Select("Select CURRENT_TIMESTAMP")
String selectCurrentTimestamp();
Run Code Online (Sandbox Code Playgroud)

问题是 h2 不断获取其运行的实际系统时间,而不是监听上面列出的时区设置。因此,无论如何,我们的单元测试中的插入都会在正确的时间插入。但是基于时间的选择似乎是根据系统时间进行翻译的,因此无法正常工作。我还过渡到使用较新的java 8 java.time 类作为我的选择函数等的参数。仍然没有骰子。

我读过一些关于此问题的帖子,涉及休眠(未明确使用)和其他一些稍微类似的问题。但是我还没有找到解决这个特定问题的方法,并且可以使用一些帮助。

JDBC,这个问题的真正根源是谁?还是H2?根据这一点,我该如何开始修复它呢?我可以向 JDBC 连接 URL 提供一个字符串吗?或者要进行其他设置?

java jdbc h2

4
推荐指数
1
解决办法
3778
查看次数