Попробуйте запрос ниже.
;with cte
AS
(
Select ROW_NUMBER() OVER(partition by STAT Order by UDATE ) as Rn,
*,
LAG(UDATE) OVER(partition by STAT Order by UDATE ) As PrevUDate,
COUNT(*) OVER(partition by STAT) As [Count]
from YourTable
)
Select Max(rn) As [Count],
OBJNR,STAT,
SUM(CASE WHEN rn%2=0 THEN DATEDIFF(d,PrevUDate,UDATE)
WHEN rn=[Count] THEN DATEDIFF(d,UDATE,getDate())
ELSE 0 END)
from cte
Group BY OBJNR, STAT
Прежде всего Вы - очень более обеспеченное выполнение этого в XAML. Это делает вещи намного более ясными и короче. Я собираюсь ответить и в XAML и в коде - позади для демонстрации этого.
Самый легкий путь состоит в том, чтобы сделать Стиль, относился к ListViewItem и использованию Метода set для применения привязки. На ListViewItem DataContext будет Вашим связанным объектом (TrinityEventData в этом случае).
Принятие Вас имело Ваш ListView в XAML:
<ListView x:Name="lstview_Unack">
<ListView.Resources>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
</Style>
</ListView.Resources>
</ListView>
В коде необходимо создать Стиль, Метод set, и Связывающий вручную:
Style listViewItemStyle = new Style { TargetType = typeof(ListViewItem) };
listViewItemStyle.Setters.Add(new Setter
{
Property = ListViewItem.IsSelectedProperty,
Value = new Binding { Path = new PropertyPath("IsSelected") }
});
lstview_Unack.Resources.Add(typeof(ListViewItem), listViewItemStyle);
Существуют проблемы с этим и виртуализацией, как бы то ни было. Если Ваш ListViewItems виртуализируется, Вы могли бы отменять выбор объекты в ListView, но привязка не будет стрелять, потому что Ваш ListViewItem не будет существовать.