0

ツリービューの実装で何が欠けていますか?? これが見られるものです: ここに画像の説明を入力

意見:

<TreeView Style="{StaticResource ExpandAllStyle}" ItemsSource="{Binding Titles}">
            <TreeView.Resources>
                <HierarchicalDataTemplate DataType="{x:Type vm:TitleViewModel}">
                    <Grid ShowGridLines="False">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition />
                            <ColumnDefinition />
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>

                        <TextBlock Text="{Binding Path=DisplayedStartTime}" Margin="0,0,10,0" />
                        <TextBlock Grid.Column="1" Text="" />
                        <TextBlock Grid.Column="2" Text="{Binding Path=Text}" />
                    </Grid>
                </HierarchicalDataTemplate>
            </TreeView.Resources>
        </TreeView>

私のリポジトリ:

public class TitleRepository : INotifyPropertyChanged
{
    #region Titles

    private ObservableCollectionEx<Title> _titles;

    public ObservableCollectionEx<Title> Titles
    {
        get { return _titles; }
        set 
        { 
            _titles = value;
            OnPropertyChanged(new PropertyChangedEventArgs("Titles"));
        }
    }

    #endregion

    #region Current Title

    private Title _currentTitle;

    public Title CurrentTitle
    {
        get { return _currentTitle; }
        set { _currentTitle = value; }
    }

    #endregion

    public TitleRepository()
    {
        _titles = new ObservableCollectionEx<Title>();

        _titles.Add(new Title("This is a title test"));
    }

と私のビューモデル: MainTreeViewModel:

    public class MainTreeViewModel : ViewModelBase
    {
        private readonly TitleRepository _titleRepository;

        private ObservableCollection<TitleViewModel> _titles;

        public ObservableCollection<TitleViewModel> Titles
        {
            get { return _titles; }
            set { _titles = value; }
        }

        public MainTreeViewModel()
        {
            _titleRepository = ((App)Application.Current).TitleRepository;

            _titleRepository.Titles.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(Titles_CollectionChanged);

            _titles = new ObservableCollection<TitleViewModel>(
                (from t in _titleRepository.Titles
                 select new TitleViewModel(t)).ToList());
        }

        void Titles_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            _titles.Add(new TitleViewModel(_titleRepository.Titles[_titleRepository.Titles.Count - 1]));
        }

タイトルビューモデル:

public class TitleViewModel : ViewModelBase
    {
        readonly Title _title;

        #region Displayed Start Time

        public string DisplayedStartTime
        {
            get { return _title.DisplayedStartTime; }
        }

        #endregion

        #region Text

        public string Text
        {
            get { return _title.Text; }
        }

        #endregion

        public TitleViewModel(Title title)
        {
            _title = title;


        }

View.cs でビュー モデルをバインドします。

        MainTreeViewModel vm = new MainTreeViewModel();
        this.DataContext = vm;

リポジトリに入力したタイトル「This is a tile test」が表示されることを期待しています。そしてそれは動的ツリーです。

4

1 に答える 1

0

srry が問題を発見しました... MainWindow の dataContext への別のバインディング。MVVM パターンは有効で機能しています。

于 2012-06-02T08:29:04.180 に答える