Как передать значение ячейки таблицы данных выбранной строки в текстовый блок в ChildWindow в Silverlight? - PullRequest
1 голос
/ 20 апреля 2011

Я создаю содержимое сетки данных из списка. Мне нужно иметь возможность передать значение ячейки «Имя» выбранной строки в сетке данных в блок техблока дочернего окна. Дочерние окна запускаются нажатием пункта контекстного меню. Сценарий заключается в том, что пользователь щелкает правой кнопкой мыши по выбранной строке «name», затем выбирает пункт контекстного меню, запускающий дочернее окно. ChildWindow запускается с текстовым значением текстового блока из этой ячейки из таблицы данных. Любые идеи высоко ценятся! Заранее спасибо!

Сеть данных с контекстным меню:

<sdk:DataGrid x:Name="dgPack" ItemsSource="{Binding Source={StaticResource PackagesCollectionViewSource}}">
<InputToolkit:ContextMenuService.ContextMenu>
        <InputToolkit:ContextMenu x:Name="cmPackages_DataGrid" DataContext="{Binding Source={StaticResource GlobalLabelsDataSource}}">
        <InputToolkit:MenuItem x:Name="item1" Header="item1"/>
        <InputToolkit:MenuItem x:Name="GetChildWindow" Header="GetChildWindow" Click="GetChildWindow_Click"/>
        </InputToolkit:ContextMenu>
    </InputToolkit:ContextMenuService.ContextMenu>
<sdk:DataGrid.Columns>
    <sdk:DataGridTextColumn x:Name="DataGrid_Name"  Binding="{Binding Name}" Header="Name" />
    <sdk:DataGridTextColumn x:Name="DataGrid_Version" Binding="{Binding Version}" Header="Version"  />
    <sdk:DataGridTextColumn x:Name="DataGrid_Size"  Binding="{Binding Size}" Header="Size" />
</sdk:DataGrid.Columns> 

Метод в коде для запуска дочернего окна:

private void GetChildWindow_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        var selectedItem = PackVM.SelectedPack;

        if (selectedItem != null)
        {
            var bpw = new GetChildWindow1_ChildWindow(selectedItem.Id);
            bpw.Show();
        }
    }

Список:

public List<Pack> GetCollection()
    {
        return new List<Pack>() 
        { 
            new Pack() { Name="item1", Size=10, Version="1"},
            new Pack() { Name="item2", Size=12, Version="5", },
        };
    }

И, наконец, дочернее окно:

<Grid x:Name="LayoutRoot">
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions
    <Button x:Name="OKButton" Content="OK" Click="OKButton_Click" Width="75" Height="23" Margin="0,0,79,0" HorizontalAlignment="Right" Grid.Row="1" />
    <Button x:Name="CancelButton" Content="Cancel" Click="CancelButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Grid.Row="1" />
    <TextBlock x:Name="Message" HorizontalAlignment="Left" TextWrapping="Wrap" Text="" VerticalAlignment="Top"/>
</Grid>

1 Ответ

0 голосов
/ 20 апреля 2011

Я не знаю, правильно ли я понял ваш вопрос, но я думаю, что вы можете решить его следующим образом:

-Объявить открытый метод в коде дочернего окна, например, "SetText (string text)""

-В этом методе просто установите Message.Text = text

public void SetText(string text)
{
    this.Message.Text = text;
}

-Теперь вызовите этот метод перед вызовом метода show из родительского окна:

bpw.SetText(selectedItem.PropertyWithTheText);

Это должно сработать.

В любом случае, вам стоит обратиться к MVVM, чтобы решить подобные вещи; -)

...