小编geo*_*tnz的帖子

如何在Silverlight中使用DataTemplate显示单个项目?

我试图使用DataTemplate显示单个项目(不包含在集合中).这是我到目前为止所得到的,没有显示任何内容.更换ItemsControlListBox显示一个空列表框(所以我知道该元素是存在的).

        <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)

data-binding silverlight datatemplate

14
推荐指数
1
解决办法
6236
查看次数

为什么join子句的顺序会影响SQL Server中的查询计划?

我正在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

11
推荐指数
1
解决办法
8356
查看次数

.NET中的精确计时

我刚看到这个问题,其中一个答案表明System.Diagnostics.Stopwatch只能用于诊断性能而不能用于生产代码.

在这种情况下,什么是在.NET中获得精确计时的最佳方法?我目前正处于使用NAudio的MIDI输出功能构建一个非常简单的MIDI音序器的早期阶段.我希望能够以尽可能小的抖动将MIDI消息发送到(例如)1/10s.这是可行的,还是像上下文切换这样的事情毁了我的一天?

我目前在控制台应用程序中有一些代码,Stopwatch在150bpm生成1/16笔记流时不断调用和计算抖动.在这种情况下抖动非常低.但是,我将把它移到另一个线程,所以我不知道是否仍然如此.

.net c# midi timing naudio

10
推荐指数
1
解决办法
2822
查看次数

PropertyChanged计算属性的通知

我正在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)

silverlight properties inotifypropertychanged

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

如何避免在SQL视图中使用getdate()?

我正在编写一个数据库视图来总结一堆记录,其中日期列中的值在过去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天窗口的少量观看.

sql database sql-server view

7
推荐指数
1
解决办法
7062
查看次数

ASP.NET 2.0站点中的ASP.NET 4.0应用程序是否可以使用相同的表单身份验证cookie?

请参阅问题底部的更新

我有一个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)

c# asp.net iis-7 forms-authentication

7
推荐指数
1
解决办法
2896
查看次数

何时取消Silverlight中的事件

单行摘要:解除在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 events mvvm

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

输入一天中的某个时间或持续时间的最直观,最实用的方法是什么?

我正在Silverlight中构建业务线应用程序,需要让用户编辑两个.NET TimeSpan值.一个是一天中的某个时间(相对于午夜),另一个是持续时间.目前我正在使用两个TextBox,格式为hh:mm.这非常简单,但绝对可以改进.我观察过人们使用这个应用程序,虽然有些人很快就进入了时间,但其他人却很挣扎.

鉴于我在Silverlight2工作,您会看到什么是完美的自定义控件,可以轻松地让您可视化和编辑这两个TimeSpans?

为了使事情更加困难,用户界面应该允许选择一天中的任何时间,精确到一分钟,但强调正常工作日内的时间(例如:上午8:00 - 下午5:00).有些用户倾向于在凌晨2点(凌晨2点)进入.

在我的应用程序中,我倾向于将时间和持续时间间隔为5分钟.作为一个背景,这个应用程序类似于房间预订应用程序,人们指定他们想要一个房间的时间和长度.

silverlight usability user-interface timespan hci

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

SWF闪存文件未加载IIS压缩

我在IIS7中的HTTPS站点上提供了大量闪存文件.打开内容压缩后,Flash文件将不会显示.闪存不支持HTTP压缩,还是IIS做了一些不寻常的事情?

compression iis flash iis-7 http

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

在OpenGL中渲染透明对象

我试图使用opengl渲染一些3d对象.要求是我需要隐藏在另一个透明对象后面的所有透明对象.所有三角形都在单个三角形缓冲区中,并将立即绘制.请多点亮一点.

opengl

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