Переключение источника привязки DataGrid в WPF - PullRequest
0 голосов
/ 01 августа 2011

На мой взгляд, существует DataGrid, и его ItemsSource привязан к списку файлов из 3 разных папок.

Можно ли программно переключать источник привязки?

Например, дляпервый клик ItemsSource="{Binding FileList}и для второго щелчка ItemsSource="{Binding FileList1}

Возможно ли это в той же DataGrid?Я слежу за MVVM и использую Prism.

Ответы [ 2 ]

1 голос
/ 01 августа 2011

Да, можно изменить контекст данных по щелчку или по какому-либо другому действию. Вы сказали, что используете призму MVVM ... Вот пример, который я создал, чтобы помочь вам ..

В этом примере мое свойство sourcess (в вашем случае это сетка данных) будет всегда привязано к свойству «Sourcelist», и по щелчку я переопределяю Sourcelist для другого списка. Поэтому при каждом щелчке мы переназначаем свойство sourcelist, котороепривязаны к сетке данных или списку

class Viewmodel : ViewModelBase
    {
        public Viewmodel()
        {
            ChangeDataSource = new DelegateCommand<object>(ChagneDataSource);
            Filelist1 = new FileListOne();
            FileList2 = new FileListTwo();
            Filelist1.Files = new List<string>();
            FileList2.Files = new List<string>();
            for (int i = 0; i < 10; i++)
            {
                Filelist1.Files.Add("FileListOne " + i);
                FileList2.Files.Add("FileListTwo " + i);
            }

            Sourcelist = Filelist1;
        }

        private object _sourcelist;

        public object Sourcelist
        {
            get
            {
                return _sourcelist;
            }
            set
            {
                _sourcelist = value;
                OnPropertyChanged("Sourcelist");
            }
        }


        public ICommand ChangeDataSource { get; set; }

        public FileListOne Filelist1 { get; set; }

        public FileListTwo FileList2 { get; set; }

        private void ChagneDataSource(object seder)
        {
            if (Sourcelist.GetType() == typeof(FileListOne))
                Sourcelist = FileList2;
            else
                Sourcelist = Filelist1;
        }
    }

    class FileListOne
    {
        public List<string> Files { get; set; }
    }


    class FileListTwo
    {
        public List<string> Files { get; set; }
    }

XAML

<StackPanel>
        <ListBox x:Name="listbox2" ItemsSource="{Binding Sourcelist.Files}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding}"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <Button x:Name="button" Content="Button" Command="{Binding ChangeDataSource}"/>

    </StackPanel>
0 голосов
/ 01 августа 2011

Эти фрагменты XAML просто переводятся как

dataGrid.SetBinding(DataGrid.ItemsSourceProperty, new Binding("FileList"));

Вам необходимо отслеживать, сколько кликов произошло в поле, и, конечно же, вам нужна ссылка на DataGrid. (Вы можете создать его через x:Reference и сохранить его в Tag или CommandParameter кнопки, если вы используете команды, которые, скорее всего, с MVVM, я полагаю)

...