Хорошо, у меня здесь есть довольно сложная функциональность. Я хотел бы знать A) Если я делаю это правильно. Если нет, что я должен изменить? 2) Если это правильно, то каково наилучшее решение моей проблемы?WPF MVVM Легкие динамические виды и датаграфиты
У меня есть главное окно со списком элементов. Если я нажму на один из них, в правой колонке Grid в этом окне должно быть заполнено DataGrid информацией о выбранном элементе. Если я щелкнул другой элемент в ListView, он должен измениться на другой DataGrid.
Я видел примеры ContentPresenter, но я не могу заставить это работать, поэтому я удалил его и покажу вам код, который у меня есть до сих пор. Прямо сейчас, у меня есть только одна настройка элемента, поэтому я буду придерживаться этого примера драйвера.
DriverGrid.xaml
<UserControl DataContext="{Binding AdminDriver, Source={StaticResource Locator}}">
<Grid>
<DataGrid>
//stuff here for datagrid
</DataGrid>
<Button Content="Edit" Command="{Binding ShowEditWindow}" />
<Button Content="Add" Command="{Binding ShowAddWindow}"/>
</Grid>
</UserControl>
AdminDriver.cs (VM)
//Contains variables, and is the datacontext for the above usercontrol
AdminMain.xaml (вид для всех админ материала)
//Contains a bunch of junk for the min admin screen which has the listview with the options in it. If you require this piece of code, I can trim it down but I don't se currently see it's relevance. The DataGrid belongs in this window, I'm assuming in a Content Presenter. Here is the ListView that is in column 1 of 2.
<ListView ItemsSource="{Binding AdminMenu}"
Name="AdminFields"
SelectionMode="Single">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<cmd:EventToCommand CommandParameter="{Binding SelectedItem, ElementName=AdminFields}" Command="{Binding registerSelected}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<ListView.ItemTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding FieldName}"/>
</ItemContainerTemplate>
</ListView.ItemTemplate>
</ListView>
Не могли бы вы объяснить модель: TypeA для меня? Я прочитал ваше предложение «Все элементы в вашем ItemsSource будут иметь тот же базовый класс или реализовать один и тот же интерфейс, чтобы вы могли поместить их в один и тот же ObservableCollection». OC не являются одним и тем же типом данных. И нет базового класса для коллекций. Еще одно замечание, также будет один элемент меню DataGrid/UserControl для EACH. Поверьте мне, я пробовал это, используя только один, но это не вариант для каждого запроса на дизайн команды. Его нужно разбить. – JTester
Итак, коллекция AdminMenu ObservableCollection
Да: this.registerSelected = new RelayCommand ((selectedMenuItem) => { this.SelectedMenuItem = selectedMenuItem.FieldName; }); Так что в нашем маленьком примере это.SelectedMenuItem = «Драйвер» –
JTester