2010-07-07 15 views
7

Bir WPF/MVVM uygulamasında, uzun bir işlem yapmadan önce ana görünüm imlecini Cursors.Wait olarak ayarlamak ve tamamlandıktan sonra varsayılan imlecine geri yüklemek için kod etkin bir yol bulmaya çalışıyorum.Görünümde bir RoutedCommand'ın yürütülmesi nasıl engellenir? (WPF/MVVM)

Yönlendirilmiş komutlar kullanılarak tüm işlemler başlatıldığından, ideal olarak, yerleşik bir yönlendirilmiş komut örneğini tamamlayan genel bir komut sınıfı oluşturarak komut yürütme yöntemini yakalamanın bir yolunu bulmak isterdim, ancak yapamıyorum Bunu nasıl yapacağınızı görselleştirin.

Özellikle, RoutedCommand.Execute yöntemi sanal değil, bu nedenle çağrılarını engellemek için başka bir mekanizmaya ihtiyacım var. Ayrıca, genel komut sınıfının bir örneğinin, imleci ayarlamak zorunda olduğu görünümü nasıl referans göstereceğinden emin değilim.

Herhangi bir öneri lütfen?

sayesinde

Tim

+0

:

Mouse.OverrideCursor = Cursors.Wait; 

Ameliyattan sonra böyle geçersiz kılma temizlemek zorunda tamamlandıktan Bunu yapmak isteyebileceğiniz bir sebep olabilir, bu biraz karmaşıktır, ancak ViewModel'inizde bir CurrentCursor özelliği oluşturamaz ve imleci bu özelliklere View (ler) inizde bağlayamazsınız. –

+1

@Wonko. Teşekkürler - bu iyi bir soru ve en MVVM uyumlu yaklaşım gibi göründüğüne katılıyorum. Ancak, aynı 2 satırlık kod değişikliğini birçok ViewModel yöntemine uygulamak zorunda kalacağım, oysa imleç yönetim kodunu merkezileştirmeyi umuyordum. İkinci bir komplikasyon, Görünümümün yönlendirilmiş komutları kabul eden bazı kontroller içermesidir. ViewModel'in bir parçası olmadıklarından, aynı mantığı operasyonlarına nasıl uygularım? –

cevap

3

Statik bir şekilde İmleç ayarlayabilirsiniz. Etki, uygulamanın belirli bir kontrolün üzerindeyken odaklanmasına rağmen imlecin 'Bekle' olacağıdır. uzun operasyon başlangıcında ViewModel bir parçası olacak

kodu: Orada

Move.OverrideCursor = null; 
+0

Fikriniz ve +1 yeni ve yararlı bir şeyler öğrettiğiniz için teşekkürler, ancak yorumumda @Wonko'ya getirdiğim sorunları gerçekten çözmüyor. –

+0

Burada bir alternatif, kendi ICommand uygulamanızı oluşturmaktır. Popüler olanı RelayCommand olarak adlandırılır, eminim ki bir yerde çevrimiçi olarak bulabileceğinizden eminim. Komutlarınız için kullanırsanız, bu imleç işlemeyi taban türünün 'yürütme' işleminde soyutlayabilirsiniz. Benim bildiğim kadarıyla, tüm yönlendirilmiş komutları küresel olarak engellemenin bir yolu yoktur. Sadece olumsuz olan, komutlarınızın artık 'yönlendirilmemesi' olacaktır. Bunun yerine ViewModel'e itiliyorlar. Bu yardımcı olur umarım. – Steven

+0

Tekrar teşekkürler Steven. Tam olarak, elde etmeyi denediğim türden bir şey olsa da, sanırım yönlendirilen komutlar olmadan yaşayabileceğimi düşünmem gerekiyor. Bunun, hedef denetimlerin (örneğin RichTextBox'u hedefleyen ToggleBold komutu) yerleşik komutlar durumunda nasıl çalışacağını görselleştirmeye çalışıyorum. Bu senaryo RelayCommand ile çalışmak için bir yolu var mı? –

İlgili konular