小编use*_*329的帖子

反序列化接口实例的集合?

我想通过json.net序列化这段代码:

public interface ITestInterface
{
    string Guid {get;set;}
}

public class TestClassThatImplementsTestInterface1
{
    public string Guid { get;set; }
}

public class TestClassThatImplementsTestInterface2
{
    public string Guid { get;set; }
}


public class ClassToSerializeViaJson
{
    public ClassToSerializeViaJson()
    {             
         this.CollectionToSerialize = new List<ITestInterface>();
         this.CollectionToSerialize.add( new TestClassThatImplementsTestInterface2() );
         this.CollectionToSerialize.add( new TestClassThatImplementsTestInterface2() );
    }
    List<ITestInterface> CollectionToSerialize { get;set; }
}
Run Code Online (Sandbox Code Playgroud)

我想用json.net序列化/反序列化ClassToSerializeViaJson.序列化工作正常,但反序列化给了我这个错误:

Newtonsoft.Json.JsonSerializationException:无法创建ITestInterface类型的实例.Type是接口或抽象类,无法实例化.

那么我该如何反序列化List<ITestInterface>集合呢?

c# json.net

59
推荐指数
6
解决办法
5万
查看次数

WPF:Scroll Itemcontrol内容固定标题

是否可以使用WPF的ItemsControl:Demo执行类似的操作

我试图冻结GroupedItems而不是GridView列.

在此输入图像描述

资源:

<Window.Resources>
    <CollectionViewSource x:Key="data" Source="{Binding}">
        <CollectionViewSource.GroupDescriptions>
            <PropertyGroupDescription PropertyName="Date"/>
        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)

列表显示:

<ListView Grid.Column="0" ItemsSource="{Binding Source={StaticResource data}}">
    <ListView.View>
        <GridView>
            <GridView.Columns>
                <GridViewColumn Header="Col 1" DisplayMemberBinding="{Binding Col1}" Width="100"/>
                <GridViewColumn Header="Col 2" DisplayMemberBinding="{Binding Col2}" Width="100"/>
                <GridViewColumn Header="Col 3" DisplayMemberBinding="{Binding Col3}" Width="100"/>
            </GridView.Columns>
        </GridView>
    </ListView.View>
    <ListView.GroupStyle>
        <GroupStyle>
            <GroupStyle.ContainerStyle>
                <Style TargetType="{x:Type GroupItem}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type GroupItem}">
                                <Grid>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="Auto"/>
                                        <RowDefinition Height="Auto"/>
                                    </Grid.RowDefinitions>
                                    <Grid Grid.Row="0">
                                        <TextBlock Background="Beige" FontWeight="Bold" Text="{Binding Path=Name, StringFormat={}{0}}"/>
                                    </Grid>
                                    <DockPanel Grid.Row="1">
                                        <ItemsPresenter Grid.Row="2"></ItemsPresenter>
                                    </DockPanel>
                                </Grid>
                            </ControlTemplate> …
Run Code Online (Sandbox Code Playgroud)

wpf gridview itemscontrol scrollview

8
推荐指数
3
解决办法
4269
查看次数

使WPF图像加载异步

我想加载Gravatar-Images并将它们从代码后面设置为WPF Image-Control.所以代码看起来像

imgGravatar.Source = GetGravatarImage(email);
Run Code Online (Sandbox Code Playgroud)

GetGravatarImage的样子:

BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri( GravatarImage.GetURL( "http://www.gravatar.com/avatar.php?gravatar_id=" + email) , UriKind.Absolute );
bi.EndInit();
return bi;
Run Code Online (Sandbox Code Playgroud)

不幸的是,当网络连接缓慢时,这会锁定GUI.有没有办法分配图像源,让它在后台加载图像而不阻塞UI?

谢谢!

wpf asynchronous image

7
推荐指数
2
解决办法
2万
查看次数

如何使用libGit2Sharp从git存储库中获取HEAD的最后一次提交?

如何从当前头部获得最后一个提交?

我想我需要获取当前的Branch(repo.Head),然后是SHA1(如何?)然后使用SHA1查找提交(如何?).

git libgit2 libgit2sharp

6
推荐指数
1
解决办法
2765
查看次数

找到指向提交的标签的最快方法是什么?

使用libgit2sharp我想做以下事情:

foreach( Commit commit in repo.Commits )
{
    // How to implement assignedTags?
    foreach( Tag tag in commit.assignedTags ) {}
}
Run Code Online (Sandbox Code Playgroud)

我想将所有标签分配给当前提交.什么是最好的方法呢?迭代所有标签,看看是否tag.Target.Sha == commit.Sha?多数表现不太好.还有另外一种方法吗?

libgit2 libgit2sharp

6
推荐指数
1
解决办法
1220
查看次数

WPF的Imagecontrol冻结了UI

我想在我的WPF应用程序中显示用户Gravatar.这就是我绑定Image-Control的方式:

<Image Source="{Binding Path=Email, Converter={StaticResource GravatarConverter},IsAsync=True}">
Run Code Online (Sandbox Code Playgroud)

GravatarConverter返回给定电子邮件的URL.不幸的是,这在加载第一张图片时完全阻止了我的UI.请注意我使用"IsAsync = True".经过一些研究后,我发现在应用程序启动时在一个单独的线程中调用FindServicePoint时,我可以解决这个问题:

        Task.Factory.StartNew( () => ServicePointManager.FindServicePoint( "http://www.gravatar.com", WebRequest.DefaultWebProxy ) );
Run Code Online (Sandbox Code Playgroud)

但是当我的应用程序已经下载图像时,当FindServicePoint没有完成时,这不起作用.有人可以解释为什么WPF-App完全需要这个FindServicePoint,为什么这会阻止UI以及如何避免阻塞?

谢谢

更新:事实证明,当我在Internet Explorers"Internet选项" - >"连接" - >"局域网设置"中取消选中"自动检测设置"后,我的问题就消失了.

我使用这个非常简单的WPF应用程序来重现问题,只需在文本框中插入图像的URL并单击按钮即可.启用"自动检测设置"后,应用程序会在第一次加载图像时冻结几秒钟.使用此选项可立即禁用其加载.

MainWindow.xaml

<Window x:Class="WpfGravatarFreezeTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <TextBox Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" x:Name="tbEmail" />
    <Button Grid.Column="0" Grid.Row="0" Click="buttonLoad_OnClick" HorizontalAlignment="Right">Set Source</Button>
    <Image x:Name="img" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2" />
</Grid>        
Run Code Online (Sandbox Code Playgroud)

MainWindow.xaml.cs

using System;
using System.Windows;
using System.Windows.Media.Imaging;

namespace WpfGravatarFreezeTest …
Run Code Online (Sandbox Code Playgroud)

c# wpf image servicepointmanager

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

获取WPF中窗口的真实位置

如何获取 WPF 窗口的真实位置(以像素为单位)?

this.PointFromScreen( new Point( 0, 0 ) );当我使用 150% 的 DPI 字体时,不会给出屏幕上的真实位置。我想这与缩放有关,但就我而言,我需要屏幕上的“真实”位置。

c# wpf

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

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