代码之家  ›  专栏  ›  技术社区  ›  Adam Rackis

将DataGrid列绑定到ViewModel属性

  •  0
  • Adam Rackis  · 技术社区  · 14 年前

    SO Question 但没有运气。

                <sdk:DataGrid Visibility="{Binding GridVisible}" DataContext="{Binding}" Grid.Row="1" ItemsSource="{Binding Path=BookSource}" x:Name="bookGrid" AutoGenerateColumns="False" IsReadOnly="True">
                    <sdk:DataGrid.Columns>
                        <sdk:DataGridTemplateColumn Visibility="{Binding Path=DataContext.GridImgColumnVisible, ElementName=bookGrid}">
                            <sdk:DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <Image Stretch="Fill" Source="{Binding Path=SmallImgURI}"></Image>
                                </DataTemplate>
                            </sdk:DataGridTemplateColumn.CellTemplate>
                        </sdk:DataGridTemplateColumn>
    
                        <sdk:DataGridTextColumn Header="Title"  Width="*"  Binding="{Binding CurrentBook.Title}" />
                        <sdk:DataGridTextColumn Header="Published" Width="150"  Binding="{Binding CurrentBook.Published, StringFormat=d}" />
                    </sdk:DataGrid.Columns>
                </sdk:DataGrid>
    

    编辑-我也尝试过:

    <sdk:DataGridTemplateColumn Visibility="{Binding Path=DataContext.GridImgColumnVisible, ElementName=root}">
    

    1 回复  |  直到 7 年前
        1
  •  3
  •   vortexwolf    14 年前

    它可以在WPF中实现,但是Silverlight DataGrid是不同的。可见性属性不是依赖属性(您不能执行绑定),列不属于VisualTree,也不继承DataContext。

    var model = (MyViewModel)this.DataContext;
    model.PropertyChanged += (s,e) => 
    {
        if(e.PropertyName == "GridImgColumnVisible")
            this.UpdateGridColumnVisibility(model.GridImgColumnVisible);
    };
    
    public void UpdateGridColumnVisibility(Visibility imageVisibility)
    {
        var imgColumn = bookGrid.Columns.Cast<DataGridColumn>().FirstOrDefault(c => ((string)c.GetValue(Panel.NameProperty)) == "imgColumn");
        if(imgColumn != null)
            imgColumn.Visibility = imageVisibility;
    }
    

    并将名称添加到列中:

    <sdk:DataGridTemplateColumn x:Name="imgColumn">