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

绑定到ItemsSource在手动检查可视元素之前不起作用(MVVM)

  •  1
  • miguel  · 技术社区  · 15 年前

    SelectedView是从Xam选项卡控件绑定到选定视图的属性。

    XAML公司

    <ToolBar DataContext="{Binding SelectedView.ViewModel}"
         ItemsSource="{Binding ContextualButtons}" >     
         <ToolBar.ItemTemplate>
          <DataTemplate>
    <!--       <Button ToolTip="{Binding Name}"-->
    <!--         Command="{Binding Command}">-->
    <!--        <Button.Content>-->
    <!--         <Image Width="32" Height="32" Source="{Binding ImageSource}"/>-->
    <!--        </Button.Content>-->
    <!--       </Button>-->
           <Button Content="{Binding Name}"/>
          </DataTemplate>
         </ToolBar.ItemTemplate>
    
        </ToolBar>
    

    代码

          public class TestViewModel : BaseViewModel, IBulkToolViewModel
          {
    
    
            public TestViewModel()
            {
              ContextualButtons = new ObservableCollection<IContextualButton>()
                                    {
                                      new ContextualButton("Test Button",
                                                           new DelegateCommand<object>(
                                                             o_ => Trace.WriteLine("Called Test Button")), String.Empty)
                                    };
            }
    
            public string Key { get; set; }
            private ObservableCollection<IContextualButton> _contextualButtons;
            public ObservableCollection<IContextualButton> ContextualButtons
            {
              get { return _contextualButtons; }
              set
              {
                if (_contextualButtons == value) return;
                _contextualButtons = value;
                //OnPropertyChanged("ContextualButtons");
              }
            }
    
          }
    
          public partial class TestView : UserControl, IBulkToolView
          {
            public TestView()
            {
              InitializeComponent();
    
            }
    
    
            public IBulkToolViewModel ViewModel { get; set; }
    
          }
          public class ContextualButton : IContextualButton
          {
            private string _name;
            public string Name
            {
              get { return _name; }
              set { _name = value; }
            }
    
            public ICommand Command { get; set; }
            public string ImageSource { get; set; }
    
            public ContextualButton(string name_, ICommand command_, string imageSource_)
            {
              Name = name_;
              Command = command_;
              ImageSource = imageSource_;
            }
          }
    
      public class BulkToolShellViewModel : BaseViewModel, IBaseToolShellViewModel, IViewModel 
      {
    
        private IBulkToolView _selectedView;
        public IBulkToolView SelectedView
        {
          get
          {
            return _selectedView;
          }
          set
          {
            if (_selectedView == value) return;
            _selectedView = value;
            OnPropertyChanged("SelectedView");
    
          }
        }
      public ObservableCollection<IBulkToolView> Views { get; set; }
    
        public DelegateCommand<object> AddViewCommand { get; private set; }
        public DelegateCommand<object> OpenPortfolioCommand { get; private set; }
        public DelegateCommand<object> SavePortfolioCommand { get; private set; }
        public DelegateCommand<object> GetHelpCommand { get; private set; }
    
    
        public BulkToolShellViewModel(ObservableCollection<IBulkToolView> views_)
          : this()
        {
          Views = views_;
        }
    
        public BulkToolShellViewModel()
        {
          Views = new ObservableCollection<IBulkToolView>();
          AddViewCommand = new DelegateCommand<object>(o_ => Views.Add(new TestView
                                                                         {
                                                                           ViewModel = new TestViewModel()
                                                                         }));
          OpenPortfolioCommand = new DelegateCommand<object>(OpenPortfolio);
          SavePortfolioCommand = new DelegateCommand<object>(SavePortfolio);
          GetHelpCommand = new DelegateCommand<object>(GetHelp);
        }
    
        private void GetHelp(object obj_)
        {
    
        }
    
        private void SavePortfolio(object obj_)
        {
    
        }
    
        private void OpenPortfolio(object obj_)
        {
    
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
        public void RaisePropertyChanged()
        {
          throw new NotImplementedException();
        }
    
        public void RaisePropertyChanged(string propertyName)
        {
          throw new NotImplementedException();
        }
    
        public string this[string columnName]
        {
          get { throw new NotImplementedException(); }
        }
    
        public string Error { get; private set; }
        public AsyncContext Async { get; private set; }
        public XmlLanguage Language { get; private set; }
        public string Key { get; set; }
    
    
      }
    

    谢谢!

    1 回复  |  直到 15 年前
        1
  •  2
  •   Tim Cooper    14 年前

    为什么会这样 BulkToolShellViewModel 有自己的 PropertyChanged RaisePropertyChanged 什么都不做的方法?它不应该继承这个功能吗 BaseViewModel BulkToolShellViewModel.PropertyChanged 而不是 BaseViewModel.PropertyChanged

    推荐文章