小编Jon*_*ell的帖子

序列化私有成员数据

我正在尝试将对象序列化为具有许多属性的XML,其中一些属性是只读的.

public Guid Id { get; private set; }
Run Code Online (Sandbox Code Playgroud)

我已经标记了类[Serializable],我已经实现了ISerializable接口.

下面是我用来序列化对象的代码.

public void SaveMyObject(MyObject obj)
{
    XmlSerializer serializer = new XmlSerializer(typeof(MyObject));
    TextWriter tw = new StreamWriter(_location);
    serializer.Serialize(tw, obj);
    tw.Close();
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,它会在第一行显示此消息.

InvalidOperationException未处理:无法生成临时类(result = 1).错误CS0200:无法将属性或索引器"MyObject.Id"分配给 - 它是只读的

如果我将Id属性设置为public,则可以正常工作.有人可以告诉我,如果我正在做某事,或者至少是否可能吗?

.net c# xml serialization serializable

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

当传递到另一个对象时,谁应该在IDisposable对象上调用Dispose?

是否有任何指导或最佳实践,Dispose()当他们被传递到另一个对象的方法或构造器时,谁应该调用一次性对象?

以下是我的意思的几个例子.

IDisposable对象被传递给一个方法(它应该在它完成后处理它吗?):

public void DoStuff(IDisposable disposableObj)
{
    // Do something with disposableObj
    CalculateSomething(disposableObj)

    disposableObj.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

IDisposable对象被传递给一个方法并保留一个引用(它应该在处理时处置它MyClass吗?):

public class MyClass : IDisposable
{
    private IDisposable _disposableObj = null;

    public void DoStuff(IDisposable disposableObj)
    {
        _disposableObj = disposableObj;
    }

    public void Dispose()
    {
        _disposableObj.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

我目前认为在第一个例子中,呼叫者DoStuff(),因为它可能创建的对象应该处理的对象.但是在第二个例子中,感觉MyClass应该处理对象,因为它保留了对象的引用.这个问题是调用类可能不知道MyClass已保留引用,因此可能决定在MyClass完成使用之前处置该对象.这种情况是否有任何标准规则?如果存在,当一次性对象传递给构造函数时它们是否不同?

.net c# idisposable

57
推荐指数
4
解决办法
9692
查看次数

WPF用户控制地狱与MVVM和依赖属性

这就是我想要做的:

  • 我写的UserControl是我希望被其他开发者消费的.
  • 我希望最终用户能够使用依赖属性来使用我的控件.

    <lib:ControlView ControlsText={Binding Path=UsersOwnViewModelText} />
    
    Run Code Online (Sandbox Code Playgroud)
  • 我正在使用MVVM模式.

  • 我将我的ViewModels绑定到他们的View使用 <DataTemplates>

    <DataTemplate DataType="{x:Type local:ControlViewModel}">  
        <local:ControlView />  
    </DataTemplate>
    
    Run Code Online (Sandbox Code Playgroud)

所以我有两个问题:

  1. 我是否认为如果在XAML中使用UserControl,那么UserControl必须将ViewModel设置为DataContext控件Loaded事件触发时的方式而不是使用<DataTemplate>方法?

  2. 如何允许用户将数据绑定到我的控件的依赖项属性,同时仍然是绑定到我的ViewModel的数据?

wpf user-controls dependency-properties mvvm

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

使用WPF根据绑定属性动态显示控件

我有一个属性是数据库数据类型(char,datetime,int,float等...),我想更改用于输入所选类型值的控件.所以对于文本值我想要一个TextBox和我想要的日期值DatePicker.

我想到的一种方法是在我的表单上Visibility使用每个控件之一并使用适当的IValueConverter实现来设置它们.我知道这会起作用,但它会产生很多代码并且感觉不太好.

我想其他的方法是使用一个ContentPresenter,并将其与内容StyleDataTriggers,但我不能得到它的工作.

    <Style x:Key="TypedValueHelper" TargetType="{x:Type ContentPresenter}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=DataType}" Value="Char">
                <Setter Property="Content" Value="???"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=DataType}" Value="Date">
                <Setter Property="Content" Value="???"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=DataType}" Value="Integer">
                <Setter Property="Content" Value="???"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
Run Code Online (Sandbox Code Playgroud)

如果有人可以填写我的"???" 或者提供更好的解决方案.

.net wpf

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

从c#交互式窗口访问配置文件

我正在尝试在VS2015 c#交互式窗口中运行一些代码,该窗口使用存储在我正在使用该#r函数引用的dll的app.config文件中的连接字符串.

如果我查看其中ConfigurationManager有一个连接字符串,但它是一个不同的,它必须从另一个配置文件引用.

c# roslyn visual-studio-2015 c#-interactive

8
推荐指数
1
解决办法
1438
查看次数

如何知道WPF中是否已取消拖放

我正在WPF中编写一个基于ListBox的用户控件.其中一个主要功能是通过拖动项目来重新排序列表.当用户拖动项目时,我将项目更改Opacity为50%,并ObservableCollection根据用户想要的位置在我的ViewModel中物理移动项目.在掉落事件中,我将Opacity回到100%.

我遇到的问题是,如果用户将项目拖离我的控件并将其丢弃到其他地方,那么我需要将其更改Opacity为100%并将项目移回用户开始拖动时的位置.是否有我可以处理的事件来捕获此操作?如果没有,有没有其他狡猾的方法来解决这个问题?

wpf drag-and-drop

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

可以使用 Coverlet 获取 .NET Framework 项目中的代码覆盖率数据吗?

我有一个大型 .NET Framework 解决方案,并希望开始收集代码覆盖率数据作为我们构建管道的一部分(以及在我们的本地开发人员机器上)。

在 Coverlet GitHub 页面上,它说它支持 .NET Framework 项目,但所有示例都使用dotnet testCLI 命令。

是否可以为此使用 Coverlet 还是我应该查看 OpenCover 之类的东西?

.net code-coverage coverlet

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

在RegionManager中找不到Region(使用PRISM)

我在Prism写一个应用程序.我有一个用户控件,包含两个<ContentControl>控件.这些都分配了区域.用户控件Window正在使用中显示ShowDialog().
我正在使用视图发现将我的一个视图添加到一个区域,另一个我想将视图注入其区域.视图发现工作正常.但是,当我尝试引用其他区域来注入视图时,我得到了异常:

KeyNotFoundException
区域管理器不包含MyRegion区域.

当我查看RegionManagers区域时,我正在尝试注入视图的那个或者正在使用视图发现的区域.

我和壳牌公司在不同的窗口是否重要?我以为只有一个RegionManager,但是我的视图发现必须有两个仍在工作......?或者是因为我在应用程序生命周期的后期创建了两个新区域?或者是因为新区域不在我的MainRegion内?

编辑:
在做了一些挖掘后,看起来像是创建了Region,但它找不到RegionManager的实例,所以它不会被添加.有线索吗?

wpf prism cab

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

共同DLL应该在WiX中具有相同的组件ID

我正在为客户端/服务器应用程序编写几个安装包.我正在使用Wix工具包,并且根据建议,每个DLL都被包装为具有唯一ID的自己的组件.

需要在两个包中安装一些常见的DLL.这些DLL是否应该具有相同的组件GUID,或者它们在每个包中是否应该不同?

.net installer windows-installer wix

3
推荐指数
1
解决办法
1334
查看次数