【问题标题】:Why I can't see the value of binding in my datagrid为什么在我的数据网格中看不到绑定的价值
【发布时间】:2020-01-26 09:30:47
【问题描述】:

我尝试在 Datagrid 中使用 bindinig,但它没有显示值

这是我的代码:

在 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();
    }

在视图模型中:

    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);
        }
    }

我在每行看到表格,它是为我写的文件夹并且不显示值

有人可以帮助我 非常感谢

【问题讨论】:

    标签: wpf xaml binding datagrid


    【解决方案1】:

    表达式

    <Grid DataContext="ListFromFolderToFileTransferViewModel">
    

    将字符串"ListFromFolderToFileTransferViewModel" 分配给Grid 的DataContext,然后由DataGrid 继承。该字符串当然没有Folders 属性。

    绑定表达式

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

    错了。您必须设置 Binding 的 Path,而不是 Source,设置 UpdateSourceTrigger 是没有意义的,因为它是 OneWay Binding。

    表达式

    Binding="{Binding Source=Folders}"
    

    DataGridTextColumn 上的也是错误的,因为 Folders 集合中的字符串项没有 Folders 属性,而且 Source 也是错误的。

    从 Grid 中移除 DataContext 赋值,并使用正确的 Binding 表达式:

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

    或 - 因为您可以在 Binding 表达式中省略 Path

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 2011-05-02
      相关资源
      最近更新 更多