Привязка к списку объектов с помощью команды на кнопку - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь создать шаблон данных для меню панели инструментов. Имеется 4 варианта для разных меню. Поэтому я решил go с шаблонами данных. Вот так суть моего кода.

xaml

<StackPanel Grid.Row="1" x:Name="ControlPanelMenuContainer">
     <ItemsControl ItemsSource="{Binding MenuItemsNeeded}" Name="DashboardButtonList">
         <ItemsControl.ItemTemplate>
             <DataTemplate>
                 <Button Command="{Binding Command}">
                     <Button.Content>
                        <Grid>
                           <TextBlock Text="{Binding Text}"></TextBlock>
                           <UserControl:Icomoon IcoIcon="{Binding Icon}" />
                        </Grid>
                     </Button.Content>
                </Button>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</StackPanel>

код позади пунктов меню Класс

  class MenuItems
        {
            private ICommand _PrivateCommandName;
            private string _PrivateIcon;
            private string _PrivateTitle;

            public ICommand CommandName
            {
                get { return _PrivateCommandName; }
                private set { _PrivateCommandName = value; }
            }

            public string Icon
            {
                get { return _PrivateIcon; }
                private set { _PrivateIcon = value; }
            }

            public string Title 
            {
                get { return _PrivateTitle; }
                private set { _PrivateTitle = value; }
            }
            public MenuItems(string title, string icon, ICommand command)
            {
                Icon = icon;
                Title = title;
                CommandName = command;
            }
        }

Код позади сжатого главного объекта

MVVM.IControllerMVVM MVVM = new MVVM.IControllerMVVM();
List<MenuItems> MenuItemsNeeded = new List<MenuItems>();


if(User_Who_IsLoggedOn == 0)
{
MenuItemsNeeded.Add(new MenuItems("Data Matrix", "Document", MVVM.GotoDataMatrixDowntimeCommand));
MenuItemsNeeded.Add(new MenuItems("Documents", "Document", MVVM.GotoDocumentsCommand));
MenuItemsNeeded.Add(new MenuItems("Inventory", "FilledBox", MVVM.GotoInventoryCommand));
MenuItemsNeeded.Add(new MenuItems("CorkBoard", "Comment", MVVM.GotoCorkboardCommand));
MenuItemsNeeded.Add(new MenuItems("Quality Assurance", "Measure", MVVM.GotoQCQACommand));
MenuItemsNeeded.Add(new MenuItems("Statistics", "LineGraph", MVVM.GotoStatisticsCommand));
MenuItemsNeeded.Add(new MenuItems("Safety", "Warning", MVVM.GotoSafetySheetCommand));
MenuItemsNeeded.Add(new MenuItems("Calendar", "Warning", MVVM.GotoEditorCommand));
}

Итак, как вы можете видеть в части кода XAML, я связал все свои свойства с соответствующими объектами. пока что ничего не появляется должным образом. Я впервые использую объект управления предметами, и да, я все еще изучаю привязки. Я смотрю видео и читаю статьи онлайн и на stackoverflow. Но ни одна из которых, я считаю, не соответствует моим потребностям. Который является привязкой с привязкой и многое другое. Прямо сейчас я не совсем уверен, почему ничто даже не заполняет панель стека вообще.

РЕДАКТИРОВАТЬ относительно PHOENIX Ответ

Я добавил publi c свойство для MenuItemsNeeded

private List<MenuItems> _MenuItemsNeeded = new List<MenuItems>();

public  List<MenuItems> MenuItemsNeeded
{
    get { return _MenuItemsNeeded; }
}

Теперь все работает, кроме привязки для раздела Имя команды.

<Button Height="40" Grid.Row="1" Style="{StaticResource NavButton}" Command="{Binding CommandName}">

1 Ответ

0 голосов
/ 01 апреля 2020

Убедитесь, что MenuItemsNeeded является общедоступным c Свойством, а не экземпляром или локальной переменной.
Убедитесь, что у вас есть текстовый текст, который включает MenuItemsNeeded в вашем окне. Если MenuItemsNeeded заполняется после визуализации экрана, измените MenuItemsNeeded из списка на ObservableCollection.

ETA: вы проверили, что команды фактически установлены в вашем экземпляре mvvm перед созданием элементов меню. Как будто они были установлены позже, тогда ваши пункты меню будут иметь команду null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...