2012-09-27 3 views
0

У меня есть представление xaml, которое содержит анимацию, которую я ввел в элемент управления контентом. В коде для xaml я загружаю анимацию через ресурсы поиска раскадровки. Пока это прекрасно. У меня проблема: в моей xaml есть кнопка, которая запускает команду ретрансляции из модели представления, выполняет вызовы базы данных, а затем запрашивает сообщение. То, что я хочу достичь, - это когда я нажимаю кнопку, я бы хотел показать анимацию, а затем, когда появится окно с сообщением, я хотел бы скрыть анимацию. Пока не повезло.Проблема с wpf с анимацией

MainView

<ContentControl Name="loader" /> 

<StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> 
    <Button Content="Test" Command="{Binding TestCommand, Mode=OneWay}" /> 
</StackPanel> 

MainView.cs

public MainView() 
{ 
    InitializeComponent(); 

    _loading = new LoadingUC(); 
    _loaderUC = _loading;   
    showLoading.Content = _loaderUC; 

    Storyboard showUC = FindResource("Test_Loading") as Storyboard; 
    showUC.Begin(_loaderUC);  
} 

TestViewModel

public ICommand TestCommand 
{ 
    get 
    { 
     return _TestCommand ?? (_TestCommand = new RelayCommand(p => TestSave())); 
    } 
} 

private void TestSave() 
{ 
// show loading 
    if (SaveSuccessFul() == true) 
    { 
     //hide loading 
     MessageBox.Show("Save Completed"); 

    } 
} 
+0

Хорошо, значит, ошибка или проблема, с которой вы сталкиваетесь, что? Каков твой вопрос? – Patrick

+0

Пожалуйста, разместите свой код, чтобы мы могли понять это. – HichemSeeSharp

+0

@HichemC - обновленный – Calvin

ответ

0

Ваш ViewModel может поднять событие непосредственно перед показом окна сообщения.

public event EventHandler LoadSuccessful; 

private void TestSave() 
{ 
// show loading 
    if (SaveSuccessFul() == true) 
    { 
     //hide loading 
     if (LoadSuccessful != null) 
      LoadSuccessful(this, EventArgs.Empty); 
     MessageBox.Show("Save Completed"); 

    } 
} 

Вид может регистрироваться на этом событии и останавливать анимацию при получении события.

public MainView() 
{ 
    InitializeComponent(); 

    _loading = new LoadingUC(); 
    _loaderUC = _loading;   
    showLoading.Content = _loaderUC; 

    Storyboard showNewPatUC = FindResource("Test_Loading") as Storyboard; 
    showNewPatUC.Begin(_loaderUC); 
} 

void OnLoadSuccessful(object sender, EventArgs args) 
{ 
    Storyboard showNewPatUC = FindResource("Test_Loading") as Storyboard; 
    showNewPathUC.Stop(); 
} 
+0

@ Алекс Гельман - не могли бы вы помочь? – Calvin

+0

Я добавил пример кода. Я не знаю, как вы перехватываете представление с помощью viewmodel, поэтому я пропустил код, который регистрируется в событии «LoadSuccessful» в представлении. –

+0

Я все еще не уверен, как настроить событие, чтобы сделать эту работу с моим видом и viewmodel. Я подключаю представление с помощью viewmodel следующим образом: Calvin

Смежные вопросы