首页 > 解决方案 > 使用 MVVM 创建动态控件

问题描述

我正在尝试第一次使用 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>

标签: c#xamlmvvm

解决方案


您缺少显示的主要原因是它AvailableMonitorOC需要是 的属性CreateAndDisplayViewModel,而不是当前的字段。

您也只需创建一个AvailableMonitorBo实例并每次更改其标题。


推荐阅读