我试图使用DataTemplate显示单个项目(不包含在集合中).这是我到目前为止所得到的,没有显示任何内容.更换ItemsControl与ListBox显示一个空列表框(所以我知道该元素是存在的).
<ItemsControl
ItemsSource="{Binding Session}"
ItemTemplate="{StaticResource SessionHeaderDataTemplate}"
/>
Run Code Online (Sandbox Code Playgroud)
Session是一个单一的对象.我想使用DataTemplate,因为我在我的应用程序的其他地方显示相同的信息,并希望将演示文稿样式定义为资源,以便我可以在一个地方更新它.
任何想法,或者我应该在我的ViewModel中创建一个1元素集合并绑定到那个?
编辑:这是我最终做的,虽然下面的答案也是一个解决方案.我非常依赖我,DataTemplates所以不觉得把这样的东西推到另一个XAML文件中.
XAML:
<ItemsControl
DataContext="{Binding}"
ItemsSource="{Binding Session_ListSource}"
ItemTemplate="{StaticResource SessionHeaderDataTemplate}" />
Run Code Online (Sandbox Code Playgroud)
视图模型:
private Session m_Session;
public Session Session
{
get { return m_Session; }
set
{
if (m_Session != value)
{
m_Session = value;
OnPropertyChanged("Session");
// Added these two lines
Session_ListSource.Clear();
Session_ListSource.Add(this.Session);
}
}
}
// Added this property.
private ObservableCollection<Session> m_Session_ListSource = new ObservableCollection<Session>();
public ObservableCollection<Session> Session_ListSource
{
get { return m_Session_ListSource; }
set
{ …Run Code Online (Sandbox Code Playgroud) 我正在SQL Server 2000(和2005)中构建一个视图,我注意到连接语句的顺序极大地影响了查询的执行计划和速度.
select sr.WTSASessionRangeID,
-- bunch of other columns
from WTSAVW_UserSessionRange us
inner join WTSA_SessionRange sr on sr.WTSASessionRangeID = us.WTSASessionRangeID
left outer join WTSA_SessionRangeTutor srt on srt.WTSASessionRangeID = sr.WTSASessionRangeID
left outer join WTSA_SessionRangeClass src on src.WTSASessionRangeID = sr.WTSASessionRangeID
left outer join WTSA_SessionRangeStream srs on srs.WTSASessionRangeID = sr.WTSASessionRangeID
--left outer join MO_Stream ms on ms.MOStreamID = srs.MOStreamID
left outer join WTSA_SessionRangeEnrolmentPeriod srep on srep.WTSASessionRangeID = sr.WTSASessionRangeID
left outer join WTSA_SessionRangeStudent stsd on stsd.WTSASessionRangeID = sr.WTSASessionRangeID
left outer join WTSA_SessionSubrange ssr …Run Code Online (Sandbox Code Playgroud) sql-server optimization join sql-server-2005 sql-server-2000
我刚看到这个问题,其中一个答案表明System.Diagnostics.Stopwatch只能用于诊断性能而不能用于生产代码.
在这种情况下,什么是在.NET中获得精确计时的最佳方法?我目前正处于使用NAudio的MIDI输出功能构建一个非常简单的MIDI音序器的早期阶段.我希望能够以尽可能小的抖动将MIDI消息发送到(例如)1/10s.这是可行的,还是像上下文切换这样的事情毁了我的一天?
我目前在控制台应用程序中有一些代码,Stopwatch在150bpm生成1/16笔记流时不断调用和计算抖动.在这种情况下抖动非常低.但是,我将把它移到另一个线程,所以我不知道是否仍然如此.
我正在Silverlight2中开发一个应用程序,并尝试遵循Model-View-ViewModel模式.我将一些控件上的IsEnabled属性绑定到ViewModel上的布尔属性.
当这些属性从其他属性派生时,我遇到了问题.假设我有一个Save按钮,我只想在可以保存的情况下启用它(数据已加载,我们目前还没忙于在数据库中执行操作).
所以我有几个这样的属性:
private bool m_DatabaseBusy;
public bool DatabaseBusy
{
get { return m_DatabaseBusy; }
set
{
if (m_DatabaseBusy != value)
{
m_DatabaseBusy = value;
OnPropertyChanged("DatabaseBusy");
}
}
}
private bool m_IsLoaded;
public bool IsLoaded
{
get { return m_IsLoaded; }
set
{
if (m_IsLoaded != value)
{
m_IsLoaded = value;
OnPropertyChanged("IsLoaded");
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想做的是:
public bool CanSave
{
get { return this.IsLoaded && !this.DatabaseBusy; }
}
Run Code Online (Sandbox Code Playgroud)
但请注意缺少属性更改通知.
所以问题是:什么是暴露我可以绑定的单个布尔属性的干净方式,但是计算而不是显式设置并提供通知,以便UI可以正确更新?
编辑: 感谢大家的帮助 - 我得到了它,并开始制作自定义属性.我在这里发布消息来源以防任何人感兴趣.我确信它可以用更干净的方式完成,所以如果你看到任何缺陷,请添加评论或答案.
基本上我所做的是创建了一个接口,它定义了一个键值对列表,用于保存依赖于其他属性的属性:
public interface INotifyDependentPropertyChanged
{
// …Run Code Online (Sandbox Code Playgroud) 我正在编写一个数据库视图来总结一堆记录,其中日期列中的值在过去7天内.它看起来像这样:
CREATE VIEW RecentRecordSum AS
SELECT t.ID,
SUM(t.SomeValue) AS ValueSum
FROM SomeTable t
WHERE t.RecordDate >= DATEADD(d,-7,GETDATE())
GROUP BY t.ID
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有直接在where子句中使用GETDATE()的情况下执行此操作?
我正在使用SQL Server 2000和2005.
查看查询计划显示getdate()调用的成本仅为整个查询的0.03%(这比上面的查询要复杂得多),因此性能不是问题,但我喜欢我的查询是确定性的.
理想情况下,我还希望将-7参数公开为列,以便可以在查询视图的where子句中使用它.目前我正在考虑7,14,28天窗口的少量观看.
请参阅问题底部的更新
我有一个ASP.NET 2.0 Web应用程序(比如说https://mysite.somedomain.com/),它使用表单身份验证.我希望在此站点中集成一个ASP.NET 4.0 Web应用程序,基于https://mysite.somedomain.com/NewApp/.Forms Auth正在处理外部应用程序,但内部应用程序拒绝cookie.
web.config 在外部(ASP.NET 2.0)Web应用程序包含:
<httpCookies requireSSL="true"/>
<authentication mode="Forms">
<forms name="MySiteWebAuth" loginUrl="/Login.aspx" protection="All"
path="/" timeout="90" requireSSL="true" slidingExpiration="true"/>
</authentication>
<machineKey (same machine key is in both configs)
validation="SHA1"
decryption="AES"/>
<authorization>
<deny users="?"/>
<allow users="*" />
</authorization>
Run Code Online (Sandbox Code Playgroud)
web.config 内部(ASP.NET 4.0)Web应用程序包含:
<authentication mode="Forms">
<forms name="MySiteWebAuth" loginUrl="/Login.aspx" protection="All"
path="/" timeout="90" requireSSL="true" slidingExpiration="true"
ticketCompatibilityMode="Framework20"/>
</authentication>
<machineKey (same machine key is in both configs)
validation="SHA1"
decryption="AES"/>
Run Code Online (Sandbox Code Playgroud)
这是Login.aspx.cs中的代码,用于在成功验证时设置cookie:
FormsAuthenticationTicket ticket =
new FormsAuthenticationTicket(
1,
ApplicationContext.User.Identity.Name,
DateTime.Now,
DateTime.Now.AddMinutes(90),
false, …Run Code Online (Sandbox Code Playgroud) 单行摘要:解除在Silverlight2中UserControl的构造函数中创建的事件处理程序的最佳实践是什么?
背景: 我目前正在Silverlight2中构建业务线应用程序.由于Silverlight是一个浏览器插件,因此没有Window的概念 - 一切都在UserControls中完成.我在应用程序中处理不同"表单"的方式是使用包含Viewbox的顶级用户控件.为了显示不同的表单,我将Viewbox的Child属性设置为不同的UserControls.我的应用程序有一个单独的PageManager类,可以调用它来打开和关闭表单.表单(UserControls)存储在堆栈中.打开一个表单将它放在堆栈的顶部,关闭它将其从堆栈中删除并显示它下面的一个.
我正在尝试遵循Model-View-ViewModel模式.在每种形式(从UserControl派生)中,我有一个ViewModel来管理View的所有数据.ViewModel公开事件,以便在完成加载和保存等操作时通知UI.
在我的表单中,在我获得ViewModel之后,我在构造函数中订阅了该事件
public partial class MyPage : UserControl
{
public MyViewModel ViewModel{get; set;}
// other constructors, which create the viewmodel and call the constructor below.
public MyPage(MyViewModel viewModel)
{
InitializeComponent();
ViewModel = viewModel;
this.LayoutRoot.DataContext = this.ViewModel;
// subscribe to event so we can do stuff
this.ViewModel.LoadCompleted += new MyViewModel.LoadCompletedEventHandler(ViewModel_LoadCompleted);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:现在我订阅了这个事件,我何时删除处理程序?我是否创建了一个析构函数并在那里创建,或者是否会创建一个鸡与蛋的情况,垃圾收集器不会破坏对象直到所有引用(即:事件处理程序)都消失了?我是否创建了一个表单必须实现的接口,该接口指定在PageManager关闭表单时调用的UnhookEvents函数?
编辑:感谢您的回复.ViewModel的持续时间比表单(UserControl)长的情况怎么样?我的应用程序的一部分允许用户创建一个非常复杂的结构,但在95%的情况下,它更简单.我所做的是创建两个使用相同ViewModel的表单.用户可以开始填写简单表单,然后切换到高级模式,这将创建一个新表单,将ViewModel传递给它.
在简单的设置形式:
private void AdvancedSessionSetupButton_Click(object sender, RoutedEventArgs e)
{
PageManager.GetPageManager().Close(this);
PageManager.GetPageManager().Open(new CreateSessionPage(this.ViewModel), "Create Session");
}
Run Code Online (Sandbox Code Playgroud)
在高级设置表单中:
private void BasicSessionSetupButton_Click(object sender, RoutedEventArgs e)
{ …Run Code Online (Sandbox Code Playgroud) 我正在Silverlight中构建业务线应用程序,需要让用户编辑两个.NET TimeSpan值.一个是一天中的某个时间(相对于午夜),另一个是持续时间.目前我正在使用两个TextBox,格式为hh:mm.这非常简单,但绝对可以改进.我观察过人们使用这个应用程序,虽然有些人很快就进入了时间,但其他人却很挣扎.
鉴于我在Silverlight2工作,您会看到什么是完美的自定义控件,可以轻松地让您可视化和编辑这两个TimeSpans?
为了使事情更加困难,用户界面应该允许选择一天中的任何时间,精确到一分钟,但强调正常工作日内的时间(例如:上午8:00 - 下午5:00).有些用户倾向于在凌晨2点(凌晨2点)进入.
在我的应用程序中,我倾向于将时间和持续时间间隔为5分钟.作为一个背景,这个应用程序类似于房间预订应用程序,人们指定他们想要一个房间的时间和长度.
我在IIS7中的HTTPS站点上提供了大量闪存文件.打开内容压缩后,Flash文件将不会显示.闪存不支持HTTP压缩,还是IIS做了一些不寻常的事情?
我试图使用opengl渲染一些3d对象.要求是我需要隐藏在另一个透明对象后面的所有透明对象.所有三角形都在单个三角形缓冲区中,并将立即绘制.请多点亮一点.
silverlight ×4
c# ×2
iis-7 ×2
sql-server ×2
.net ×1
asp.net ×1
compression ×1
data-binding ×1
database ×1
datatemplate ×1
events ×1
flash ×1
hci ×1
http ×1
iis ×1
join ×1
midi ×1
mvvm ×1
naudio ×1
opengl ×1
optimization ×1
properties ×1
sql ×1
timespan ×1
timing ×1
usability ×1
view ×1