2012-09-25 12 views
6

मेरे पास विंडोज 2012 में एक डब्ल्यूपीएफ प्रोजेक्ट है जिसमें मुझे विंडो लोडेड इवेंट में कुछ जानकारी लोड करने की आवश्यकता है। मुझे कोडबैंड के बजाए व्यू मॉडल में ऐसा करने की ज़रूरत है, हालांकि। मेरी XAML मेंविंडो लोड और डब्ल्यूपीएफ

: मैं निम्नलिखित कोड का उपयोग करने का प्रयास कर रहा हूँ

<interactivity:Interaction.Behaviors> 
    <behaviors:WindowLoadedBehavior LoadedCommand="{Binding WindowLoadedCommand}" /> 
</interactivity:Interaction.Behaviors> 

मेरी देखें मॉडल में:

private DelegateCommand _WindowLoadedCommand; 

public DelegateCommand WindowLoadedCommand 
{ 
    get 
    { 
     return _WindowLoadedCommand; 
    } 
    private set 
    { 
     _WindowLoadedCommand = value; 
    } 
} 

public ShellViewModel() 
{ 
    WindowLoadedCommand = new DelegateCommand(WindowLoadedAction); 
} 

protected void WindowLoadedAction() 
{ 
    ... 
} 

मेरे संलग्न व्यवहार:

public class WindowLoadedBehavior : Behavior<FrameworkElement> 
{ 
    [SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "SA1401:FieldsMustBePrivate", Justification = "Dependency Property. Allow public.")] 
    public static DependencyProperty LoadedCommandProperty = DependencyProperty.Register("LoadedCommand", typeof(ICommand), typeof(WindowLoadedBehavior), new PropertyMetadata(null)); 

    public ICommand LoadedCommand 
    { 
     get { return (ICommand)GetValue(LoadedCommandProperty); } 
     set { SetValue(LoadedCommandProperty, value); } 
    } 

    protected override void OnAttached() 
    { 
     base.OnAttached(); 

     AssociatedObject.Loaded += AssociatedObject_Loaded; 
    } 

    protected override void OnDetaching() 
    { 
     AssociatedObject.Loaded -= AssociatedObject_Loaded; 

     base.OnDetaching(); 
    } 

    private void AssociatedObject_Loaded(object sender, RoutedEventArgs e) 
    { 
     if (LoadedCommand != null) 
      LoadedCommand.Execute(null); 
    } 
} 

OnAttached, एसोसिएटेड ऑब्जेक्ट_लोडेड और लोडेड कॉमांड सभी फायरिंग प्राप्त कर रहे हैं, लेकिन लोडेड कॉमांड सेट फायरिंग नहीं है और जाहिर है , WindowLoadedCommand फायरिंग नहीं है। इस काम को पाने के लिए मैं क्या कर सकता हूं?

+1

कोई विशेष कारण है कि आप सीधे आदेश के लिए बाध्यकारी नहीं हैं? –

+0

जो मैंने पढ़ा है, उससे विंडो लोडेड ईवेंट को बाध्यकारी सीधे किसी कारण से काम नहीं करता है। –

उत्तर

28

कुछ विकल्प हैं। उनमें से एक जोड़े को यहाँ सूचीबद्ध:

how to call a window's Loaded event in WPF MVVM?

हालांकि, बंद मौका है कि आप या किसी और को परवाह नहीं है कि आप कई घंटे खर्च कर रहे हैं एक काम है कि 30 सेकंड ले लिया है चाहिए पूरा करने के लिए, आप का प्रयास करना चाहें में इसके बजाए

public MainWindow() 
{ 
    InitializeComponent(); 

    this.Loaded += new RoutedEventHandler(MainWindow_Loaded); 
} 

void MainWindow_Loaded(object sender, RoutedEventArgs e) 
{ 
    ShellViewModel.Instance.WindowLoadedCommand.Execute(null); 
} 
+2

वह सही था! स्पष्ट रूप से जिस समस्या में मैं चल रहा था वह यह है कि खिड़की लोड होने से पहले इवेंट हैंडलिंग कक्षाएं ठीक से लोड नहीं हुई थीं। आपकी विधि (छोटे और बिंदु के साथ) ने इससे बचा है और इसे सही ढंग से आग लगाने की अनुमति दी है। –

संबंधित मुद्दे