【问题标题】:How to bind a Silverlight Toolkit DataGrid cell value to a TextBlock or TextBox text property如何将 Silverlight Toolkit DataGrid 单元格值绑定到 TextBlock 或 TextBox 文本属性
【发布时间】:2011-07-31 01:13:35
【问题描述】:

我需要实现一个主/详细信息View,将DataGrid 作为主控,很可能TextBlockTextBox 组件显示每个行字段的详细信息——尽管我知道@ 987654325@ 组件我不确定这是否是解决方案,因为目前我不需要支持对该数据的 CRUD 操作。

So the problem is basically how to bind each DataGridTextColumn to a particular Text property of any given control (e.g. TextBlock) having its values uptated when a different row is selected.

XAML 代码如下所示:

<!-- Master -->

<sdk:DataGrid x:Name="FoobarDataGrid" DataContext="foobar" AutoGenerateColumns="False">
    <sdk:DataGrid.Columns>
        <sdk:DataGridTextColumn x:Name="FooDataGridColumn" Header="Foo" Binding="{Binding Foo}" />
        <sdk:DataGridTextColumn x:Name="BarDataGridColumn" Header="Bar" Binding="{Binding Bar}" />
    </sdk:DataGrid.Columns>
</sdk:DataGrid>

<!-- Details -->

<TextBox x:Name="FooDetailsTextBlock" Text="{Binding <!-- TODO -->}" />
<TextBox x:Name="BarDetailsTextBlock" Text="{Binding <!-- TODO -->}" />

请不要犹豫,询问任何其他细节,我们将不胜感激每一个建议。

【问题讨论】:

    标签: c# silverlight datagrid silverlight-toolkit


    【解决方案1】:

    已编辑:这是您的代码的样子...

    <!-- Master -->
    
    <sdk:DataGrid x:Name="FoobarDataGrid" DataContext="foobar" AutoGenerateColumns="False">
        <sdk:DataGrid.Columns>
            <sdk:DataGridTextColumn x:Name="FooDataGridColumn" Header="Foo" Binding="{Binding Foo}" />
            <sdk:DataGridTextColumn x:Name="BarDataGridColumn" Header="Bar" Binding="{Binding Bar}" />
        </sdk:DataGrid.Columns>
    </sdk:DataGrid>
    
    <!-- Details -->
    
    <TextBox 
        DataContext="{Binding SelectedItem, ElementName=FoobarDataGrid}"
        x:Name="FooDetailsTextBlock" 
        Text="{Binding Foo}" />
    
    <TextBox 
        DataContext="{Binding SelectedItem, ElementName=FoobarDataGrid}"
        x:Name="BarDetailsTextBlock" 
        Text="{Binding Bar}" />
    

    原始答案...

    这是一种方法...

    我的DataGrid 绑定到一个自定义类的集合。该类有一个名为LabName 的属性。这就是我绑定到DataGrid 中的列的内容@

    XAML

        <sdk:DataGrid 
            Name="LabsDataGrid" 
            ItemsSource="{Binding}" 
            AutoGenerateColumns="False" 
            Height="284" 
            HorizontalAlignment="Left" 
            Margin="205,250,0,0" 
            VerticalAlignment="Top" 
            Width="359" 
            IsReadOnly="True">
    
            <sdk:DataGrid.Columns>
    
                <sdk:DataGridTextColumn 
                    Header="Lab Name" 
                    Binding="{Binding LabName}" />
    
            </sdk:DataGrid.Columns>
    
        </sdk:DataGrid>
    
    
        <TextBox 
            DataContext="{Binding SelectedItem, ElementName=LabsDataGrid}"
            Name="LabName" 
            Text="{Binding LabName}"
            Height="23" 
            HorizontalAlignment="Left" 
            Margin="324,121,0,0" 
            VerticalAlignment="Top"
            Width="132" />
    

    请注意,我将TextBoxDataContext 设置为DataGridSelectedItem。因此,当用户单击DataGrid 中的一行时,TextBox 将填充LabName,该LabName 绑定到DataGrid 中的列。

    【讨论】:

    • 非常感谢您的贡献,这是一个非常有趣的方法。
    • 我稍微编辑了标记:在 Grid 中包装了 TextBox 组件,以避免为每个元素声明 DataContext 属性。非常感谢!
    • @Nano:我想我也会去编辑我的代码来做到这一点。我从来没有想过这样做。
    猜你喜欢
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多