代码之家  ›  专栏  ›  技术社区  ›  nikotromus

使用MVVM创建动态控件

  •  0
  • nikotromus  · 技术社区  · 6 年前

    我第一次尝试使用mvvm创建一个动态控件。我想动态生成按钮,并在按钮内显示内容。我肯定我错过了一些很容易的事情,但我不知道会是什么。当我运行代码时,界面上没有显示任何内容,尽管我可以看到构造函数中有可用的monitoroc填充。。。

    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));
                }
            }
        }
    

     <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 回复  |  直到 6 年前
        1
  •  1
  •   Peregrine    6 年前

    你缺乏展示的主要原因是 AvailableMonitorOC 必须是的财产 CreateAndDisplayViewModel

    你也只创造了一个 AvailableMonitorBo 实例并每次更改其标题。