我来自Java背景,并且花了很多年时间使用Eclipse.我在使用Visual Studio(2008)时遗漏的一个功能是,当我更改类时,类视图不会自动刷新.在Eclipse中它有一个(类)'Outline'窗口,它表示当前类并显示方法/属性等,它总是更新为正在使用的类.
VS中的等效"类视图"不会根据我正在访问的当前类自动刷新.我想知道是否有人知道如何实现这一目标?
理想情况下,我希望VS视图与Eclipse类似,因为我可以得到它,但这一个功能会很棒.
先谢谢,威尔
我有一个Dictionary
包含物品和价格.这些项目是唯一的,但在应用程序的生命周期中慢慢添加和更新(也就是说,我事先不知道项目字符串).我想将此结构绑定到DataGridView,因此我可以在我的表单上显示更新,如:
Dictionary<string, double> _priceData = new Dictionary<string, double>();
BindingSource _bindingSource = new BindingSource();
dataGridView1.DataSource = _bindingSource;
_bindingSource.DataSource = _priceData;
Run Code Online (Sandbox Code Playgroud)
但不能,因为Dictionary
没有实现IList
(或IListSource
,IBindingList
或IBindingListView
).
有没有办法实现这个目标?我需要保留一个唯一的项目列表,但也要更新现有项目的价格,因此Dictionary
我认为a 是理想的数据结构,但我找不到在我的表单上显示数据的方法.
更新:
Marc的建议下面的工作非常好,但我仍然不确定如何在执行期间更新DataGridView.
我有一个类级变量:
private DictionaryBindingList<string, decimal> bList;
Run Code Online (Sandbox Code Playgroud)
然后在Main()
:中实例化
bList = new DictionaryBindingList<string,decimal>(prices);
dgv.DataSource = bList;
Run Code Online (Sandbox Code Playgroud)
然后在程序执行期间,如果将新条目添加到字典中:
prices.Add("foobar", 234.56M); bList.ResetBindings();
Run Code Online (Sandbox Code Playgroud)
我认为这将刷新DataGridView.为什么不?
我有一个接口,定义了一些我希望某些类实现的方法.
public interface IMyInterface { MethodA; MethodB; }
另外,我希望实现此接口的所有类都可以序列化.如果我更改接口定义以实现ISerializable如下...:
public interface IMyInterface : ISerializable { MethodA; MethodB; }
...据我所知,所有类现在必须显式实现序列化,因为如果实现ISerializable,则必须实现GetObjectData成员(以及反序列化所需的构造函数).
如何坚持使用我的界面的类是可序列化的,但不强制他们自定义实现序列化?
谢谢,威尔
我有一个客户端 - 服务器系统,双方都是我编写的,当服务器断开/死机时我想让客户端处于"离线"状态,然后当服务器再次可用时自动将它们"恢复"为"在线"状态.
对于第一部分,我通过将客户端设置为脱机来监听通道故障事件并进行处理.然后我开始在服务器上调用"ping"服务(每30秒),如果它还活着,它就会返回一个bool.一旦它活着,客户端就会获得bool并重新上线.
这一切都有效,我遇到的问题是,当客户端调用ping服务并且服务器关闭时,没有响应(显然),最终,大约2分钟后,我得到一个端点未找到异常.到这个时候,我已经尝试了3-4次ping,因此有3-4个异常酿造.
我的问题是,如何更优雅地处理ping服务?理想情况下,我想定期拨打一个服务,让我知道它是否在线,并立即让我知道它是否在线.
我正在使用带有RowDetails面板的WPF Datagrid,其中RowDetailsVisibilityMode设置为"VisibleWhenSelected",SelectionMode ="Extended",以便可以选择多行,从而显示RowDetails,如下所示:
<dg:DataGrid x:Name="MyGrid"
ItemsSource="{Binding Path=MyItems}"
AutoGenerateColumns="True"
SelectionMode="Extended"
RowDetailsVisibilityMode="VisibleWhenSelected">
<dg:DataGrid.RowDetailsTemplate>
<DataTemplate>
<TextBlock Text="Further Details..."/>
</DataTemplate>
</dg:DataGrid.RowDetailsTemplate>
...
</dg:DataGrid>
Run Code Online (Sandbox Code Playgroud)
遗憾的是,对于此应用程序,在"选定"行上显示行详细信息并不直观,客户端希望单击多个行上的复选框以显示RowDetails窗格,还可以在网格中滚动选择其他行.换句话说,无论DataGrid上发生什么,都要修复显示RowDetails的行.
因此,目前滚动关闭他们已打开的RowDetailsPanes.我想要做的是在其中一个列中有一个复选框,并将RowDetails面板可见性绑定到此属性,但我无法弄清楚如何执行此操作.问题只是RowDetailsPane只对数据网格中的行选择进行操作 - 是否可以以某种方式扩展以对我选择的属性进行操作?
先谢谢,威尔
我有一个需要将大文件上传到Azure BLOB存储的Web应用程序.我的解决方案使用HTML5 File API切片成块,然后将块作为blob块放置,块的ID存储在数组中,然后块作为blob提交.
该解决方案在IE中运行良好.在64位Chrome上,我已经成功上传了4Gb文件但是看到了非常大的内存使用量(2Gb +).在32位Chrome上,特定的镀铬工艺将达到约500-550Mb然后崩溃.
我看不到任何明显的内存泄漏或我可以改变以帮助垃圾收集的事情.我将块ID存储在一个数组中,所以显然会有一些内存蠕变,但这不应该很大.这几乎就像File API将整个文件保存在内存中一样.
它是作为一个从控制器调用的Angular服务编写的,我认为只是服务代码是相关的:
(function() {
'use strict';
angular
.module('app.core')
.factory('blobUploadService',
[
'$http', 'stringUtilities',
blobUploadService
]);
function blobUploadService($http, stringUtilities) {
var defaultBlockSize = 1024 * 1024; // Default to 1024KB
var stopWatch = {};
var state = {};
var initializeState = function(config) {
var blockSize = defaultBlockSize;
if (config.blockSize) blockSize = config.blockSize;
var maxBlockSize = blockSize;
var numberOfBlocks = 1;
var file = config.file;
var fileSize = file.size;
if (fileSize < blockSize) {
maxBlockSize = …
Run Code Online (Sandbox Code Playgroud) 我想知道是否可以在数据网格左上角的"全选"按钮中添加功能,以便它也可以取消选择所有行?我有一个方法附加到一个按钮来执行此操作,但如果我可以从全选按钮触发此方法,以保持功能在视图的相同部分,这将是很好的.这个"全选"按钮是否可以添加代码,如果是,那么如何进入按钮?我找不到任何例子或建议.
是否可以防止锚定停靠在我的文档窗格中?我希望它们可以拖动并在屏幕上移动,但有时用户将它们拖到文档窗格中,这使它们看起来很差.然后他们关闭标签,我无法重新打开可锚定的.
如果它有助于我的Avalon代码如下:
<avalonDock:DockingManager.Theme>
<avalonDock:VS2010Theme />
</avalonDock:DockingManager.Theme>
<avalonDock:DockingManager.DocumentHeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<StackPanel Orientation="Horizontal">
<!-- the TextBlock named Limiter is used to limit the height of the TextBlock for the workflow name. -->
<TextBlock x:Name="Limiter" TextWrapping="NoWrap" Visibility="Hidden"
TextTrimming="CharacterEllipsis">
L
</TextBlock>
<TextBlock Text="{Binding Path=Title}" VerticalAlignment="Center"
ToolTip="{StaticResource WorkflowTabItemToolTip}"
MaxHeight="{Binding ActualHeight, ElementName=Limiter}" MaxWidth="150"
TextWrapping="NoWrap" TextTrimming="CharacterEllipsis" Margin="0,0,2,0"
AutomationProperties.AutomationId="WorkflowTabTitleText"/>
<TextBlock Text=" *"
ToolTip="Has unsaved changes"
Visibility="{Binding Content.UnsavedEdits, Converter={StaticResource BoolToVis}}"
AutomationProperties.AutomationId="DirtyTabIndicator"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</avalonDock:DockingManager.DocumentHeaderTemplate>
<avalonDock:DockingManager.LayoutItemContainerStyleSelector>
<utilities1:PanesStyleSelector>
<utilities1:PanesStyleSelector.WebUIStyle>
<Style TargetType="{x:Type avalonDock:LayoutAnchorableItem}">
<Setter Property="Title" Value="{Binding Model.Title}"/>
<Setter Property="IconSource" Value="{Binding …
Run Code Online (Sandbox Code Playgroud) 我有一个我需要二进制序列化的类.该类包含一个字段,如下所示:
private T[,] m_data;
Run Code Online (Sandbox Code Playgroud)
这些多维数组可以相当大(数十万个元素)和任何原始类型.当我在一个对象上尝试标准的.net序列化时,写入磁盘的文件很大,我认为.net存储了很多关于元素类型的重复数据,可能没有那么高效.
我一直在寻找自定义序列化器,但还没有看到任何处理多维通用数组.我已经在内存流的字节数组上尝试了内置的.net压缩,序列化后取得了一些成功,但没有像我希望的那样快速/压缩.
我的问题是,我应该尝试编写一个自定义序列化程序,以便为适当的类型最佳地序列化这个数组(这看起来有点令人生畏),还是应该使用标准的.net序列化并添加压缩?
关于最佳方法的任何建议都是最受欢迎的,或链接到显示如何处理多维通用阵列的序列化的资源 - 正如我所发现的现有示例所提到的不支持这样的结构.
我试图定义一个返回接口的WCF合约,如下所示:
[ServiceContract]
public interface IMyContracts
{
[OperationContract]
IMyInterface GetData(string request);
}
Run Code Online (Sandbox Code Playgroud)
为了实现这一点,我认为我的接口(IMyInterface
)必须实现ISerializable
以确保可以序列化实现我的接口的类.这意味着我必须为实现我的接口的任何类手动实现序列化.
如果使用的是不可序列化的类,或者我使接口实现ISerializable
并且具有手动实现的相关麻烦,那么我似乎使用我的接口并冒险运行时错误.
我迷惑自己,错过了一些明显的东西吗?其他人如何使用WCF返回接口并避免此问题?
非常感谢.
我有一个WPF数据网格,我正在使用多个列.其中一列有一些有时为null的元素,当我尝试对此列进行排序时会导致异常.
列的定义如下:
<dg:DataGrid.Columns>
<dg:DataGridTextColumn Binding="{Binding MyObject.Field1}" Header="Field1" Width="Auto" />
<dg:DataGridTextColumn Binding="{Binding MyObject.Field2.SubField}" Header="Field2" Width="Auto" />
</dg:DataGrid.Columns>
Run Code Online (Sandbox Code Playgroud)
如果我对Field1列进行排序就可以了,如果我对Field2列进行排序并且没有空的Field2对象就可以了,但有时会有并且DataGrid尝试对SubField进行排序(我猜)并且遇到一个空异常:
System.InvalidOperationException was unhandled
Message=The SortDescriptions added are not valid. The probable solutions are to set the CanUserSort on the Column to false, or to use SortMemberPath property on the Column, or to handle the Sorting event on DataGrid.
Run Code Online (Sandbox Code Playgroud)
我已经尝试将SortMemberPath设置为"MyObject.Field2.SubField",但当然这并没有解决它,因为Field2有时仍然为null.我想知道尝试使用转换器,我设置SortMemberPath并让转换器返回string.empty为任何null元素,但无法让它工作.
我也尝试在这些列的绑定中添加"TargetNullValue = {x:Static sys:String.Empty}",但它仍然无效.
任何意见/建议将非常感谢.谢谢,威尔
我熟悉Caliburn Micro及其使用的范例,但我现在正在尝试集成AvalonDock.
作为一个POC,我有一个非常简单的应用程序,其中一个shell视图模型包含一个按钮,用于激活我的StructureViewModels - 一个包含名称和标题的简单类.结构视图是一个用户控件,它只是将名称显示为文本.
ViewModel和Views正在使用Caliburn很好地连接,它们正在Docking Manager中显示.我可以拖动和分离,枚举窗格等 - 所有Avalon功能似乎都有效.我遇到的问题是它们在Avalon标题(标签)中没有标题显示.
ShellViewModel:
using AvalonDemo.Properties;
using Caliburn.Micro;
namespace AvalonDemo.ViewModels
{
public class ShellViewModel : Conductor<IScreen>.Collection.OneActive
{
private int _structureCount;
public ShellViewModel()
{
WindowTitle = Resources.MainWindowTitle;
_structureCount = 1;
}
public string WindowTitle { get; set; }
public void OpenStructure()
{
ActivateItem(new StructureViewModel
{
Name = "Structure" + _structureCount++,
Title = "Structure" + _structureCount
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑解决方案:
ShellView:
<Window x:Class="AvalonDemo.Views.ShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:avalonDock="http://schemas.xceed.com/wpf/xaml/avalondock"
xmlns:cal="http://www.caliburnproject.org"
xmlns:common="clr-namespace:AvalonDemo.Common"
Title="{Binding WindowTitle}"
Height="850" Width="1200">
<Grid>
<Grid.RowDefinitions>
<RowDefinition …
Run Code Online (Sandbox Code Playgroud) c# ×9
.net ×8
wpf ×5
datagrid ×3
avalondock ×2
interface ×2
wcf ×2
wpfdatagrid ×2
azure ×1
binary ×1
datagridview ×1
dictionary ×1
disconnect ×1
eclipse ×1
fileapi ×1
html5 ×1
ide ×1
javascript ×1
mvvm ×1
sorting ×1
winforms ×1
xaml ×1