Чтобы изменить визуальное состояние элемента, вы можете сделать это из кода на странице, например:
VisualStateManager.GoToState(yourViewElement, yourViewElementState);
Однако, не самый лучший совет, но вы можете подписаться изменения в вашей модели представления, из вашего code.behind, а затем вызовите VisualStateManager.
Пример
YourPage()
{
viewModel.PropertyChanged += FooChanged;
}
public void FooChanged()
{
if (!args.PropertyName.Equals("YourProperty"))
{
VisualStateManager.GoToState(yourViewElement, yourViewElementState);
}
return;
}
Это работает просто великолепно, никакая потребность в любых курсорах на этом. Это может быть возможно к fangle что-то без таблицы числа также.
Отметьте при движении этим видом решения, я имел бы в наличии таблицу числа и не воссоздал бы ее каждый раз, когда я выполнил запрос.
create table #splitme (Id int, description varchar(255), quantity int)
insert #splitme values (1 ,'my desc', 3)
insert #splitme values (2 ,'desc 2', 2)
create table #numbers (num int identity primary key)
declare @i int
select @i = max(quantity) from #splitme
while @i > 0
begin
insert #numbers default values
set @i = @i - 1
end
select Id, description, 1 from #splitme
join #numbers on num <= quantity
DECLARE @Id INT
DECLARE @Description VARCHAR(32)
DECLARE @Quantity INT
DECLARE @Results TABLE (Id INT, [description] VARCHAR(32), quantity INT)
DECLARE MyCursor CURSOR FOR
SELECT Id, [description], quantity
FROM
MyTable
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @Id, @Description, @Quantity
WHILE @@FETCH_STATUS = 0
BEGIN
WHILE @Quantity > 0
BEGIN
INSERT INTO @Results (
Id,
[description],
quantity
) VALUES (
@Id,
@Description,
1
)
SET @Quantity = @Quantity - 1
END
FETCH NEXT FROM MyCursor INTO @Id, @Description, @Quantity
END
CLOSE MyCursor
DEALLOCATE MyCursor
SELECT *
FROM
@Results
Между прочим, курсоры обычно считают злыми. Таким образом, я буду и рекомендовать против чего-то вроде этого и благодарить всех заранее за их провокационные сообщения ;) (Но это должно работать),