Как связать значение ячейки DataGrid набора инструментов Silverlight с текстовым свойством TextBlock или TextBox - PullRequest
2 голосов
/ 06 апреля 2011

Мне нужно реализовать мастер / детали View, имея DataGrid в качестве мастера и вполне вероятно, TextBlock или TextBox компоненты, отображающие детали для каждого поля строки - несмотря на то, что я знаю о * Компонент 1005 * Я не совсем уверен, что это будет решением, учитывая, что в настоящее время я не обязан поддерживать операции CRUD над этими данными.

Таким образом, проблема заключается в том, как привязать каждое DataGridTextColumn к определенному Text свойству любого данного элемента управления (например, TextBlock), значения которого повышаются при выборе другой строки.

Код 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 -->}" />

Не стесняйтесь спрашивать о любых других деталях, так как каждый совет будет высоко ценится.

1 Ответ

2 голосов
/ 06 апреля 2011

РЕДАКТИРОВАНИЕ: Вот как будет выглядеть ваш код ...

<!-- 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

1017 * 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" />

Обратите внимание, что я устанавливаю DataContext TextBox на SelectedItem DataGrid. Поэтому, когда пользователь щелкает строку в DataGrid, TextBox заполняется LabName, привязанным к столбцу в DataGrid.

...