2015-06-12 8 views
7

Mam projekt WPF i trzeba utworzyć formant, który jest specyficzny dla domeny, ale będzie ponownie wykorzystane w wielu widoków.Kontrola WPF - czy za wszelką cenę należy unikać kodowania?

Sterownik musi wyświetlać wartość dziesiętną w 3 częściach, część integralną i część dziesiętną podzielić na 2 z różnymi rozmiarami czcionek. Mam właściwość zależność dla kwoty, a następnie podzielić kwotę na 3 części w kodzie, więc mogę pokazać je w konkretnych etykietach. Używam również wartości dziesiętnej, aby zdecydować, czy kwota idzie w górę lub w dół, a następnie zmienić kolor tła kontrolki. Wszystko to odbywa się za kodem. Wiem, że niektórzy twierdzą, że kod jest zły i zgadzam się w większości przypadków. Jak jednak mógłbyś to zrealizować inaczej?

+0

"część dziesiętna podzielona na 2 z różnymi rozmiarami czcionek" - czy możesz wyjaśnić to nieco dalej? – goobering

+1

To szczegół i nie ma większego znaczenia dla pytania. Wyobraź sobie, że muszę wyświetlić pierwsze 3 miejsca po przecinku z przodu 10, a reszta w czcionce 8. – Klaws86

Odpowiedz

12

Nie, nie powinno być unikane pod wszystkie koszty.

Pamiętaj, Dane to dane, interfejs użytkownika to interfejs użytkownika.

Na przykład, jeśli posiadasz kod, który zawiera tylko , to nie ma nic złego w tym, że masz za sobą kod.

Wszystko, co działa z rzeczywistych danych, w tym pracy z ViewModel powinny być ogólnie unikać kodu źródłowego, jak można następnie tworzenie zależności, które przerw projekt wzorca MVVM.

Aby odpowiedzieć na Twoje pytanie bardziej bezpośrednio, nie ma nic złego w tym, co zrobiłeś.

EDIT

Pozwól mi wyjaśnić dalej.

Wyobraź sobie scenę, masz widok z przyciskiem, który musi rozpocząć Storyboard po kliknięciu. (Oczywiście, możesz to zrobić tylko w XAML, ale to tylko przykład)

W tym przypadku nie ma nic złego w dodawaniu zdarzenia kliknięcia do przycisku i uruchamianiu scenorysu z tyłu kodu. Jest to kod UI tylko, więc jest bezpieczny.

Jednak załóżmy, że przycisk musi zmienić właściwość w ViewModel, gdy zostanie kliknięty. Ty nie powinien zdobyć DataContext w zabezpieczeniu kodu. Konieczne będzie użycie Command, ponieważ trzeba oddzielić widok View od obiektu ViewModel.

Istnieje piętno, że jeśli twoje poglądy mają za sobą kod, powinieneś zostać wycofany i postrzelony w tył głowy, styl egzekucji. To nieprawda.

Wszystko to powiedziawszy, MVVM jest wzór, a nie prawem.

+0

Uzgodnione. Zastrzegam sobie tylko egzekucje dla tych, którzy zdecydują się używać Windows Forms, kiedy mogą preferować WPF. – Falanwe

+0

Zgadzam się z tą filozofią w 100%. Jednak niektórzy twierdzą, że wszystko, co można zrobić za pomocą kodu, można zrobić w XAML (jak na przykład w tablicy opowieści). Czy istnieje jakiś konstrukt XAML, który może pomóc w powyższym? – Klaws86

+0

@ Klaws86 Not * everything * ma rozwiązanie wyłącznie dla XAML i jestem przekonany, że to, czego potrzebujesz, nie ma rozwiązania wyłącznie dla XAML. Kod źródłowy jest nie bez powodu, podczas gdy XAML wydaje się niewiarygodnie pro, czasami po prostu nie można go osiągnąć i ** to nie jest złe **. Pomagając Ci stworzyć kontrolę, która spełnia twoje wymagania wykracza poza zakres twojego pytania, lepiej byłoby zadać nowe pytanie, jeśli utkniesz. –

0

Zamiast dzielić Kwotę w 3 w polu Za, możesz zachować jedną wartość właściwości w ViewModel i użyć konwertera z 3 parametrami, aby wyodrębnić jedną z trzech informacji do wyświetlenia.Więc można mieć 3 wiązań tak:

"{Binding Amount, Mode=TwoWay, Converter={StaticResource AmountSplitterConverter},ConverterParameter=Integral}" 

"{Binding Amount, Mode=TwoWay, Converter={StaticResource AmountSplitterConverter},ConverterParameter=Decimal1}" 

"{Binding Amount, Mode=TwoWay, Converter={StaticResource AmountSplitterConverter},ConverterParameter=Decimal2}" 

Daj mi znać, jeśli potrzebujesz dodatkowej pomocy w jego realizacji lub jeśli nie jest to oczywiste.

+0

Dziękuję za to, niestety potrzebuję wartości Amount i poprzedniej wartości, aby móc wykonać logikę czcionki na kontrolerze, więc rozwiąże to tylko połowę problemu. – Klaws86

Powiązane problemy