Почему я не вижу значения привязки в моей сетке данных - PullRequest
1 голос
/ 26 января 2020

Я пытаюсь использовать bindinig в Datagrid, но он не показывает мне значения

, это мой код:

в xaml:

<Grid DataContext="ListFromFolderToFileTransferViewModel">
    <DataGrid Name="datagrid" SelectionChanged="selectionChanged" ItemsSource="{Binding Source=Folders,UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top" CanUserAddRows="False"   >
        <DataGrid.Columns>
            <DataGridTextColumn  Header="Folders" Binding="{Binding Source=Folders}" Foreground="Black" IsReadOnly="false" />
        </DataGrid.Columns>
    </DataGrid>
</Grid>

в xaml.cs:

public ListFromFolderToFileTransferView()
    {
        InitializeComponent();
        DataContext = new ListFromFolderToFileTransferViewModel();
    }

в viewModel:

    object _lock = new object();
    public event PropertyChangedEventHandler PropertyChanged;
    ObservableCollection<string> _Folders=new ObservableCollection<string>();;
    public ObservableCollection<string> Folders { get => _Folders; set { _Folders = value; OnPropertyChanged("Folders"); } }

    public ListFromFolderToFileTransferViewModel()
    {
        BindingOperations.EnableCollectionSynchronization(Folders, _lock);                   
        string[] folders = Directory.GetDirectories(FilePath);
        foreach (var folder in folders)
        {
            DirectoryInfo d = new DirectoryInfo(folder);
            Folders.Add(d.Name);
        }
    }

, и я вижу таблицу в каждой строке ее записи для меня Папки и не показывает значения

кто-то может мне помочь большое спасибо

1 Ответ

1 голос
/ 26 января 2020

Выражение

<Grid DataContext="ListFromFolderToFileTransferViewModel">

назначает строку "ListFromFolderToFileTransferViewModel" для DataContext Grid, который затем наследуется DataGrid. Эта строка, конечно, не имеет свойства Folders.

Выражение привязки

ItemsSource="{Binding Source=Folders,UpdateSourceTrigger=PropertyChanged}"

неверно. Вы должны установить путь привязки, а не его источник, и установка его UpdateSourceTrigger не имеет смысла, потому что это привязка OneWay.

Выражение

Binding="{Binding Source=Folders}"

в DataGridTextColumn также неверно, поскольку строковый элемент в коллекции папок не имеет свойства папок, и опять-таки источник неверен.

Удалите назначение DataContext из таблицы и используйте правильные выражения привязки:

<Grid>
    <DataGrid ItemsSource="{Binding Path=Folders}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Folders" Binding="{Binding Path=.}"/>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

или - потому что вы можете опустить Path в выражении Binding:

<Grid>
    <DataGrid ItemsSource="{Binding Folders}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Folders" Binding="{Binding}"/>
        </DataGrid.Columns>
    </DataGrid>
</Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...