我有一个绑定到视图模型中的List的数据网格.在单击行标题之前,网格的内容不会更新.单击各种单元格不会影响它.我必须点击标题.
这是XAML中的datagrid:
<DataGrid x:Name="TransactionDetailsGrid" Grid.Row="1" AutoGenerateColumns="False" SelectionMode="Extended" IsReadOnly="True" HeadersVisibility="Column"
ItemsSource="{Binding TransactionDetailList}" SelectedItem="{Binding SelectedTransactionDetail}" GridLinesVisibility="None">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Account.AccountNumber}" Header="Account No." HeaderStyle="{StaticResource DataGridHeaderStyleCenter}" Width="120" />
<DataGridTextColumn Binding="{Binding Path=Account.AccountName}" Header="Account Name" HeaderStyle="{StaticResource DataGridHeaderStyleCenter}" Width="*" />
<DataGridTextColumn Binding="{Binding Path=Amount}" Header="Amount" HeaderStyle="{StaticResource DataGridHeaderStyleCenter}" Width="120" />
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
这是来自视图模型:
public List<TransactionDetail> TransactionDetailList
{
get { return this._transactionDetailList; }
set
{
this._transactionDetailList = value;
RaisePropertyChanged("TransactionDetailList");
}
}
Run Code Online (Sandbox Code Playgroud)
这是视图模型中其中一个项目的编辑:
private void AddTransactionDetail()
{
TransactionDetailViewModel viewModel = new TransactionDetailViewModel();
MainWindowViewModel.ViewLoader.ShowDialog(viewModel);
if (viewModel.TransactionDetail != null)
{
this.TransactionDetailList.Add(viewModel.TransactionDetail);
RaisePropertyChanged("TransactionDetailList");
} …
Run Code Online (Sandbox Code Playgroud) 我习惯在每种方法中使用try/catch块.这样做的原因是我可以在违规点捕获每个异常并记录它.从我的阅读和与他人的对话中我理解,这不是一种流行的观点.人们应该只抓住人们准备处理的事情.但是,如果我没有抓到违规点,那么就有可能永远不会记录这种违规行为并了解它.注意:当我抓住并且不处理时,我仍然会抛出.这允许我让异常传播到将处理它的东西,但仍然让我在违规点记录它.
那么......如何在每个方法中避免try/catch,但仍然在错误发生时记录错误?
在尝试将类型分配给类型的属性时System.Type
,为什么我们不能这样做?
foo.NetType = bool;
Run Code Online (Sandbox Code Playgroud)
编译器生成此警告:
"表达预期."
解决它的方法是这样做:
foo.NetType = typeof(bool);
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么我们不能使用第一种方法?难道编译器不够聪明,无法弄清楚我们在这里要完成的工作吗?我们有必要采用第二种方法(typeof
)吗?
编辑:我的问题是没有得到我正在寻找的主要答案.我不清楚.我真的很想知道两件事:
Dispose()
导致内存泄漏?我的印象是,如果Dispose()
未在IDisposable
对象上调用内存泄漏.
根据这个帖子的讨论,我的看法不正确; 如果Dispose()
未调用,则不会发生内存泄漏.
那么为什么打扰Dispose()
呢?是否只是立即释放资源,而不是以后的某个时间?如果你有一个大型程序并且从不调用Dispose()
任何IDisposable
对象,那么最糟糕的事情是什么?
如何使用resharper创建一个类的接口?该选项显示为灰色.
VS确实有一个选项可以重构接口,但是resharper默认将它取出.
我试图理解为什么在浏览虚拟目录时我的默认文档没有出现.如果我像我应该那样浏览网站,我会得到这个:
但是,如果我将页面添加到URL,它会出现:
一个SO答案建议删除除真实文档之外的所有默认文档(在IIS中).我尝试过(图片如下),但没有帮助.
使用根URL(http://localhost/SignalRChat
)时,为什么IIS不会提供该页面?
删除默认文档后,这是web.config的相关部分:
<defaultDocument>
<files>
<remove value="default.aspx" />
<remove value="iisstart.htm" />
<remove value="index.html" />
<remove value="index.htm" />
<remove value="Default.asp" />
<remove value="Default.htm" />
<add value="ChatPage.cshtml" />
</files>
</defaultDocument>
Run Code Online (Sandbox Code Playgroud)
这是处理程序部分:
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*."
verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"
modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll"
preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*."
verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"
modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll"
preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*."
verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
Run Code Online (Sandbox Code Playgroud) 我在VS 2013中调试一些C#代码时观察到一些奇怪的行为.当我将鼠标悬停在任何作用于当前方法的变量上时,我可以看到变量的信息.在下面的屏幕截图中,您可以看到ivSimulation已固定并显示信息.然而,即使你不知道,我还有鼠标this._simulator
,没有任何显示.QuickWatch也没有显示任何内容.
另一位同事也有同样的问题.我们已经尝试过擦干文件夹并再次获取最新信息.我们还尝试将VS中的设置(工具 - >选项 - >调试 - >常规 - >使用管理兼容模式)更改为正在检查,但这也没有奏效.显然,这对其他人有用.这在VS 2012中运作得很好.
有任何想法吗?如何在调试器中显示类级变量?
编辑:另一块拼图
如果我将鼠标悬停在上面,this
我会发现它是一个透明的代理.不知道为什么会这样.
另一件作品:
this
指的是派生自的类ContextBoundObject
.我们这样做,所以我们可以使用拦截进行日志记录和异常处理.也许这就是原因.
我错了; 这在VS2012中不起作用.也许我以前从未注意过它.
如果我尝试在即时窗口中显示值,这就是我得到的:
?this._coater.Equipment.Line.Unit.Plant.Site.SiteId无法在类型为"Company.Mes.Core.Components.Logic.ModuleDerating.StandardDeratingComponentLogic"的实例上获取字段或调用方法,因为它是远程对象的代理.
我一直在尝试创建一个扩展方法,它可以在任何枚举上工作,以返回它的值.
而不是这样做:
Enum.GetValues(typeof(BiasCode)).Cast<BiasCode>()
Run Code Online (Sandbox Code Playgroud)
这样做会很好:
new BiasCode().Values()
Run Code Online (Sandbox Code Playgroud)
如果没有新的话会更好,但这是另一个问题.
我有一个.NET小提琴,它有一个接近的解决方案(代码如下所示).此代码的问题是扩展方法正在返回List<int>
.我想让它返回枚举值本身的列表.回归List<int>
并不可怕; 这只是意味着我必须施展结果.
甚至可以这样做吗?我尝试使扩展方法通用,但遇到了问题.这与我能够得到的一样接近:
using System;
using System.Linq;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
foreach (int biasCode in new BiasCode().Values())
{
DisplayEnum((BiasCode)biasCode);
}
}
public static void DisplayEnum(BiasCode biasCode)
{
Console.WriteLine(biasCode);
}
}
public enum BiasCode
{
Unknown,
OC,
MPP
}
public static class EnumExtensions
{
public static List<int> Values(this Enum theEnum)
{
var enumValues = new List<int>();
foreach (int enumValue …
Run Code Online (Sandbox Code Playgroud) 我的机器上禁用DTC.我的理解是这个代码应该失败,因为它在同一个事务中使用了两个数据上下文.那么,它为什么有用呢?(注意:我尝试使用.NET 3.5和.NET 4.0.)
using (TransactionScope transactionScope = new TransactionScope())
{
UpdateEta();
UpdateBin();
transactionScope.Complete();
}
Run Code Online (Sandbox Code Playgroud)
以下是调用的DAL方法:
public static void UpdateBin(Bin updatedBin)
{
using (DevProdDataDataContext dataContext = new DevProdDataDataContext(ConnectionString))
{
BinRecord binRecord = (from bin in dataContext.BinRecords
where bin.BinID == updatedBin.BinId
select bin).FirstOrDefault();
binRecord.BinID = updatedBin.BinId;
binRecord.BinName = updatedBin.BinName;
dataContext.SubmitChanges();
}
}
public static void UpdateEta(Eta updatedEta)
{
using (DevProdDataDataContext dataContext = new DevProdDataDataContext(ConnectionString))
{
EtaRecord etaRecord = (from eta in dataContext.EtaRecords
where eta.ID == updatedEta.ID
select eta).FirstOrDefault();
etaRecord.ID = updatedEta.ID;
etaRecord.Title …
Run Code Online (Sandbox Code Playgroud) 我需要找到我最近的变更集,以便我可以为每个变更集添加一些内容.
我尝试在源代码管理资源管理器中执行查看历史记录,但我没有看到按用户过滤该方法的方法.(如果我使用这种方法,我可以打开一个变更集并成功更改注释.但是,这很痛苦,因为它没有被用户过滤.)
我还尝试右键单击团队项目并执行查找 - >查找更改集.这会打开一个对话框,我可以在其中找到适合我的变更集.但是,保存按钮被禁用?为什么?
如何启用保存按钮?或者,如果不能发生这种情况,我怎样才能找到我的变更集并在每条评论中添加一些数据?
c# ×7
.net ×2
asp.net ×1
binding ×1
datacontext ×1
datagrid ×1
debugging ×1
enums ×1
idisposable ×1
iis ×1
iis-8 ×1
linq-to-sql ×1
memory-leaks ×1
resharper ×1
tfs ×1
tfs2010 ×1
wpf ×1