Pencerenin yüklü olduğunu bildirmek için bir komut tetiklemek mümkün mü? Ayrıca , senin View arkasındaki kodu önlemek için (anlamda Caliburn, ONXY, MVVM Araç Seti, vb çerçeveler)Wpf'de bir pencere yüklendiğinde Komut nasıl tetiklenir
cevap
herhangi MVVM çerçeveler kullanmıyorum , Microsoft'tan ücretsiz olarak indirebileceğiniz System.Windows.Interactivity dll (Expression Blend ile birlikte gelir) etkileşim kitaplığını kullanın.
Ardından, bir komutu yürüten bir davranış oluşturabilirsiniz. Bu şekilde Tetikleyici, Komutu çağıran Davranışı çağırır.
<ia:Interaction.Triggers>
<ia:EventTrigger EventName="Loaded">
<custombehaviors:CommandAction Command="{Binding ShowMessage}" Parameter="I am loaded"/>
</ia:EventTrigger>
</ia:Interaction.Triggers>
CommandAction (ayrıca System.Windows.Interactivity kullanır) şöyle olabilir:
public class CommandAction : TriggerAction<UIElement>
{
public static DependencyProperty CommandProperty = DependencyProperty.Register("Command", typeof(ICommand), typeof(CommandAction), null);
public ICommand Command
{
get
{
return (ICommand)GetValue(CommandProperty);
}
set
{
SetValue(CommandProperty, value);
}
}
public static DependencyProperty ParameterProperty = DependencyProperty.Register("Parameter", typeof(object), typeof(CommandAction), null);
public object Parameter
{
get
{
return GetValue(ParameterProperty);
}
set
{
SetValue(ParameterProperty, value);
}
}
protected override void Invoke(object parameter)
{
Command.Execute(Parameter);
}
}
Bu kodun Silverlight için olduğunu fark ettim. WPF'de eşdeğer tetikleyici/davranışlar bulabilirseniz, aynı prensiplerin işe yarayacağını düşünürdüm. – programatique
CommandAction yerine, şimdi bunun için mevcut bir eylem var gibi görünüyor [InvokeCommandAction] (http://msdn.microsoft.com/en-us/library/system.windows.interactivity.invokecommandaction (Expression.40) .aspx) – Patrick
private void Window_Loaded(object sender, RoutedEventArgs e)
{
ApplicationCommands.New.Execute(null, targetElement);
// or this.CommandBindings[0].Command.Execute(null);
}
ve xaml
Loaded="Window_Loaded"
MVVM kullanıyorum bahsetmeyi unuttum. Ne zaman, bir pencere yüklenir. ViewModel sınıfımda dinleyebileceğim bir komut vermeli. –
MVVM bir din değildir. CodeBehind'e bir kod satırı ekleyebilir ve dünya hala dönecektir. –
Emin misin? dönmeye devam edeceğinden emin misin? :) – GONeale
davranışları kullanan bir daha genel bir yol AttachedCommandBehavior V2 aka ACB de önerilmiştir ve hatta birden fazla olay için-komuta bağlamaları destekler
<Window x:Class="Example.YourWindow"
xmlns:local="clr-namespace:AttachedCommandBehavior;assembly=AttachedCommandBehavior"
local:CommandBehavior.Event="Loaded"
local:CommandBehavior.Command="{Binding DoSomethingWhenWindowIsLoaded}"
local:CommandBehavior.CommandParameter="Some information"
/>
- 1. SVG: Belge yüklendiğinde komut dosyasını çalıştır
- 2. stSearch nasıl tetiklenir?
- 3. APScheduler şimdi nasıl tetiklenir
- 4. Bir giriş netlendiğinde bir eylem nasıl tetiklenir?
- 5. Yerel bildirim yalnızca bir kez nasıl tetiklenir?
- 6. Farklı işlevlere sahip bir işlev nasıl tetiklenir
- 7. Özellik hakkında bir storyboard nasıl tetiklenir
- 8. Magento'da ödeme sırasında bir etkinlik nasıl tetiklenir?
- 9. Bir pencere nasıl canlandırılır?
- 10. URL'de belirli bir karma için bir Chrome uzantısı, içerik komut dosyası nasıl tetiklenir?
- 11. Özellik değiştiğinde DataTemplateSelector nasıl tetiklenir?
- 12. Snap Svg ile nasıl tetiklenir?
- 13. -l parametresiyle yüklendiğinde geçerli emacs komut dosyasının yolunu alın
- 14. IE8'de özel bir javascript olayı nasıl tetiklenir?
- 15. Bir pencere toplu iş komut dosyasındaki bir dosyadan değer okuma
- 16. Bir IFRAME etkinleştirme olayı tam olarak ne zaman tetiklenir?
- 17. Soruları olan bir açılır pencere nasıl oluşturabilirim?
- 18. Bir telefon ekranı sayfası yüklendiğinde bir giriş alanına nasıl odaklanabilirim?
- 19. Bir WCF hizmetini çağırdığımda bir olay (istemci tarafı) nasıl tetiklenir
- 20. Pencere Kimliği'ni kullanarak bir pencere etkinleştirin
- 21. ShowDialog() pencere modelini oluşturmuyor
- 22. Uygulama yüklendiğinde olay (Android)
- 23. WPF sayfası nasıl kapatılır pencere gibi pencere
- 24. dosya kopyalama pencere komut satırında ağ bilgisayarlarına Windows üzerinde bir komut dosyası oluşturmak için çalışıyorum
- 25. Çözüm yüklendiğinde TFS'ye nasıl otomatik olarak geçilir?
- 26. Görünüm zaten yüklendiğinde klavyenin görünmesiyle nasıl açılır?
- 27. Yorum ekledikten sonra VBA kodu nasıl tetiklenir?
- 28. Linux uygulamasında sahte uyandırma nasıl tetiklenir?
- 29. AnimateCamera yakınlaştırma anı nasıl tetiklenir 'sadece' sonlandır?
- 30. İstemciden web çerçevesi çerçeve fragmantasyonu nasıl tetiklenir?
hemen hemen tüm olaylar ateş edemez: İşte
kullanımının çok basit bir örnektir ViewModel'de bir komut. Kodu kabul edip CodeBehind'e 1 satırlık bir kod yazabilir veya birkaç karmaşık kod satırının aynı şeyi yapmasından sonra bazı belirsiz desenleri uygulayabilirsiniz. #dontbeapurist –@EduardoMolteni ile katılmıyorum. Eğer etkinlik veri ile çalışmakla ilgiliyse, o zaman WPF'deki davranışları kullanarak kolay bir şekilde önlenebilen SM ile arka planda çalışmanız gerekecektir. – JoanComasFdz