Мне нужно решить следующую проблему, используя C # MVVM. Я использую следующую модель.
![enter image description here](https://i.stack.imgur.com/0vdXO.png)
И один из моих пользовательских элементов управления получил следующий шаблон ListBox.
<ListBox ItemsSource="{Binding OrdersListViewViewModel.AllItems, Source={StaticResource Locator}}" SelectedItem="{Binding OrdersListViewViewModel.SelectedItem, Source={StaticResource Locator}}" Background="White">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" Margin="0 0 0 0" Height="Auto" Width="Auto" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,7,0,6" HorizontalAlignment="Left" Orientation="Horizontal">
<Image Width="25" Height="25" Margin="5 2 0 0" Source="{Binding OrdersListViewViewModel.OrderDeliveryStateImage, Mode=OneWay, Source={StaticResource Locator}}"/>
<TextBlock Margin="25,5,25,5" Text="{Binding OrdersListViewViewModel.AllItems/Customer.CustomerName, FallbackValue=N/A, Mode=OneWay, Source={StaticResource Locator}}" FontSize="20"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
В списке отображаются все заказы (имена клиентов), загруженные из базы данных. Изображение, которое находится рядом с TextBlock, я хочу заполнить рисунком. Если все элементы заказа по заказу были доставлены ( Доставлено = 1 ), он должен использовать picture1, в противном случае picture2.
Так что я связываюсь ObservableCollection<Order>
. Модель генерируется из .tt с использованием структуры сущностей (сначала db), поэтому неправильно помещать вычисления непосредственно в класс Order.cs из-за возможных обновлений db.
Моей первой идеей было использование столбца MSSQL Computed , но я думаю, что это не очень хороший подход (в решении может быть много ситуаций, подобных этой), поэтому модель будет огромной и сложной.
Вторая идея состояла в том, чтобы использовать конвертер , но его следует использовать для простых задач, а не для логики вычислений (что это такое).
Третья идея состояла в том, чтобы изменить ObservableCollection<Order>
на ObservableCollection<Tuple<string,Order>>
и каким-то образом связать его с представлением, но ... вы знаете, это плохая идея.
Так что мой вопрос прост. Как я могу решить эту проблему (, где разместить вычислительную логику этой цели), используя лучший метод MVVM.
Спасибо.