создание динамических элементов управления с MVVM - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь создать динамический элемент управления с использованием mvvm в первый раз.Я хочу динамически генерировать кнопки и отображать содержимое внутри кнопок.Я уверен, что мне здесь чего-то не хватает, но я понятия не имею, что это может быть.Когда я запускаю код, в интерфейсе ничего не появляется, хотя я вижу заполнение AvailableMonitorOC в конструкторе ...

Вот моя ViewModel, где я вручную добавляю кнопки в наблюдаемую коллекцию для простоты в этом примере:

public class CreateAndDisplayViewModel {
    public ObservableCollection<AvailableMonitorBo> AvailableMonitorOC = new ObservableCollection<AvailableMonitorBo>();

    public CreateAndDisplayViewModel() {           
        availableMonitorBo = new AvailableMonitorBo();

        availableMonitorBo.AvailableMonitorLabel = "Label 1";
        AvailableMonitorOC.Add(availableMonitorBo);

        availableMonitorBo.AvailableMonitorLabel = "Label 2";
        AvailableMonitorOC.Add(availableMonitorBo);
    }

    private AvailableMonitorBo availableMonitorBo;
    public AvailableMonitorBo AvailableMonitorBo {
        get { return availableMonitorBo; }
        set {
            availableMonitorBo = value;
        }
    }
}

Вот моя модель:

 public class AvailableMonitorBo : INotifyPropertyChanged {

        private string availableMonitorLabel { get; set; }
        public string AvailableMonitorLabel {
            get { return availableMonitorLabel; }
            set {
                availableMonitorLabel = value;
                OnPropertyChanged("AvailableMonitorLabel");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(string propertyName) {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null) {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }

А вот и xaml:

 <ListView Grid.Row="2" Grid.Column="1"                        
           ItemsSource="{Binding AvailableMonitorOC, Mode=TwoWay}">
                <ListView.ItemTemplate>
                    <DataTemplate>              
                            <StackPanel>                              
                                <Button Content="{Binding AvailableMonitorLabel}"
                                        Width="100"
                                        Height="25"/>
                            </StackPanel>           
                    </DataTemplate>
      </ListView.ItemTemplate>
 </ListView>

1 Ответ

0 голосов
/ 17 сентября 2018

Основная причина отсутствия отображения в том, что AvailableMonitorOC должно быть свойством CreateAndDisplayViewModel, а не полем, как в настоящее время.

Вы также создаете только один AvailableMonitorBoэкземпляр и каждый раз меняя заголовок.

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