Model MVVM bindowani zdarzen

0

Witam, ucze się dopiero programowania w tym module ale utknalem przy bindowaniu, po prostu nie umiem sobie z tym poradzić, szukałem troche na internecie ale nic takiego co mogło by mi pomoc nie znalazłem. I taka prośba do was czy mogłby ktos podac jakies madre źródło, gdzie jest to jako tako wytlumaczone bo nigdzie nie potrafilem znaleŹĆ dobrze opisanego przykladu z czyms takim

0

Jakie zdarzenie chciałbyś zbindować? I w jakim celu. Korzystając z wzorca MVVM unikamy code-behinde i wykorzystywania zdarzeń UI. Opisz coś więcej.

0

Na pluralsight jest fajny tutorial, jest cyba mozliwosc stworzenai triala. Jak masz mozliwosc to goraco polecam.

A jeśli nie to na codeproject jest tez kilka fjanych artykułów o command bindingu.

0

Chodzi po prostu o zbinowanie przyciskow, np wczytanie czegos do pictureboxa po wcisnieciu klawisza, albo np znalezienie linii na obrazie po wcisnieciu przycisku. Same funkcje ktore to robia mam, tylko nie wiem jak to obindowac zeby nie pisac tego w code-behind. Robilem to w winForms ale sama aplikacja troche bardziej sie rozbudowala i potrzebowalem jakiegos dobrego czytelnego modelu. No i tm czyms jest to mvvm z tym ze własnie nie potrafie sobie poradzic z tym bindowaniem...

0

http://code-forge.pl/2013/03/24/kurs-mvvm-helloword-w-mvvm-czesc-2/ Przepisz cały przykład. Pobaw się i zobacz co z tego wyjdzie.

0

Ostatnio też walczyłem z MVVM i WPF. Dość dużo odpowiedzi znalazłem w "Pro WPF and Silverlight MVVM. Effective Application Development with Model-View-ViewModel" (Do znalezienia)

Pozdro

0

Tak to mniej wiecej wygląda, no i chodzi o to aby funkcje wczytywania obrazu z Klasy LoadImage w folderze Commands zbindowac z przyciskiem wczytaj.

1

O interfejsie ICommand słyszałeś?

implementujesz interfejs ICommand:

public class ActionCommand : ICommand
    {
        public event EventHandler CanExecuteChanged
        {
            add { CommandManager.RequerySuggested += value; }
            remove { CommandManager.RequerySuggested -= value; }
        }
 
        private Action methodToExecute;
        private Func<bool> canExecuteEvaluator;
 
        public ActionCommand(Action methodToExecute, Func<bool> canExecuteEvaluator)
        {
            this.methodToExecute = methodToExecute;
            this.canExecuteEvaluator = canExecuteEvaluator;
        }
 
        public ActionCommand(Action methodToExecute)
            : this(methodToExecute, null)
        {
        }
 
        public bool CanExecute(object parameter)
        {
            if (canExecuteEvaluator == null)
            {
                return true;
            }
            else
            {
                bool result = canExecuteEvaluator.Invoke();
                return result;
            }
        }
 
        public void Execute(object parameter)
        {
            methodToExecute.Invoke();
        }
    }

w ExpositionDetailsViewModel:

//gdzies w kodzie
public ActionCommand LoadCommand { get; private set; }

//w konstruktorze
LoadCommand = new ActionCommand(LoadImage);

//gdzies w kodzie
private void LoadImage()
        {
            //tu wylądujesz po naciśnięciu Wczytaj w menu
        }

i w widoku podłączasz się tak jak wcześniej Ci pisałem w komentarzu poprzez Command
<MenuItem Header="_Wczytaj" Command="{Binding LoadCommand}" />

0

Wiesz co pokombinowałem i wszystko działa cała funkcja po kliknieciu sie odpala z tym że po wybraniu obrazu nie wyświetla sie on na tym pictureboxie :/

Tak wygląda funkcja wczytujaca obraz:


private Image Expo = new Image();

      public void LoadImage()
      {
          //tu wylądujesz po naciśnięciu Wczytaj w menu
          OpenFileDialog op = new OpenFileDialog();
          op.Title = "Select a picture";
          op.Filter = "All supported graphics|*.jpg;*.jpeg;*.png|" +
            "JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|" +
            "Portable Network Graphic (*.png)|*.png";
          if (op.ShowDialog() == true)
          {
              Expo.Source = new BitmapImage(new Uri(op.FileName));
          }
      }
 

Tak wyglada kod w ExpositionDetailsViewModel a kontrolka wiaomo nazywa sie Expo, no tylko mowie nic sie na moim pictureboxie nie zmienia

0

Czemu Expo nie jest właściwością (property)? Zrób z Expo property i binduj ją do widoku.

0

Ale jak z tego property zrobic?

0

weź się za jakiś kurs mvvm a nie pytaj o takie podstawy bo to wskazuje tylko i wyłącznie na Twoje lenistwo.

private Image _Expo;
public Image Expo
{
get { return _Expo; }
set
{
if (value != _Expo)
{
_Expo = value;
OnPropertChanged("Expo");
}
}
}

kod pisany z palca wiec może być jakaś literówka etc

0

Akurat to co mi tutaj podałeś miałem, natomiast źle zbindowałem już sama zmianę obrazka ale już to ogarnąłem. Także wielkie dzięki za pomoc ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1