Wpis z mikrobloga

#csharp #programowanie

Rzeźba w XAMLu. Odcinek 4654276.

Mam sobie klasę-model, która posiada własne properties. Ma ona w sobie jakieś pola etc. Obiekty tej klasy upchane są w ObservableCollection na potrzeby wyświetlania w tabeli po zbindowaniu. No ale problem jest w tym, że bindujemy całą kolekcję a nie poszczególne elementy.

Chcę osiągnąć efekt tego, aby np. kilka properties tego modelu było wyświetlane (tak jest teraz), ale na podstawie jednego z tych properties wewnątrz tego modelu kolorowane będzie tło. Jak to osiągnąć? Jak w ogóle zbindować properties wewnątrz tej kolekcji, bo w taki oczywisty sposób (że po prostu binding: nazwa_property w klasie) nie chce mi łapać.
  • 11
@Khaine:


<Style.Triggers>
<DataTrigger Binding="{Binding Member}" Value="ColorMeRed">
<Setter Property="Background" Value="Red"></Setter>
</DataTrigger>
</Style.Triggers>
@javarzi: Wpisywałem właśnie tak jak masz, już wcześniej na to wpadłem, ale coś mu się #!$%@?ło ze składnią. Być może dlatego, że to na frameworku (DevExpress) a nie łysy NET. Ogółem nie mam pojęcia czemu ta składnia mu nie pasowała, jutro spojrzę jeszcze raz.
@Khaine: DevKupa często robi rzeczy po swojemu (np. jeśli używasz CellTemplate to twoja kontrolka powinna nazywać się "Part_Editor" i dziedziczyć po jakiejś DevExpressowej klasie). W rowku w DataContext jest obiekt devexpressowy, a nie z twojej kolekcji. Żeby się dobrać do swoich obiektów trzeba bindować do 'RowData.Row.propercja'.

Nie wiem, czy coś podobnego zadziała:

...

Odnośnie DevExpress warto szukać na ich forum.
@Khaine: Jeśli nie robisz żadnej magii z ich kontrolkami to jest ok, ale jak chcesz zrobić coś czego nie przewidzieli to zostaje ich forum i haki. Ostatnio bawiłem się w łatanie wycieków pamięci, więc najbardziej pamiętam problemy z tym związane.

Z tego co pamiętam to starają się trzymać zgodność (nie wiem jak im to wychodzi) wszystkich swoich kontrolek niezależnie od technologii (WPF, WinForms, Asp.Net, ...), z tym (działanie focusa) kolega miał
Style wpf-owe im nie wystarczyły to zrobili swoje RenderTemplate, jak nie dotykasz, to jest ok, ale jeśli coś źle zmienisz to możesz mieć wyciek pamięci.


@boo007: W C#? Jak oni to #!$%@? zrobili?
@Khaine: Tu masz przykład jak wygląda RenderTemplate: XAML w 1 poscie

Styl to nie jest żadna magia, tam się tylko definiuje settery i triggery.

Najprostszy sposób jak zrobić własny obiekt 'stylu':
1. Tworzysz swoją klasę A np. z property 'Color' (*).
2. W swojej kontrolce tworzysz DependencyProperty o typie A, która na zmianie wartości robi magię (odczytuje to co podepniemy i podpina odpowiednie eventy, ustawia wartości)
3. W ResourceDictionary tworzysz obiekt