我从列表中生成datagrid内容。我需要能够将datagrid中所选行的“Name”单元格的值传递给子窗口的texblock。通过单击上下文菜单项启动子窗口。方案是用户右键单击选定行“名称”单元格上的鼠标,然后选择启动子窗口的上下文菜单项。使用来自数据网格的该单元格的文本块文本值启动ChildWindow。任何想法都非常感谢!提前谢谢!
带上下文菜单的Datagrid:
<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>
答案 0 :(得分:-1)
我不知道我是否理解你的问题,但我认为你可以这样解决:
-Declare后面的子窗口代码中的公共方法,如“SetText(string text)”
- 在此方法中,只需设置Message.Text = text
即可public void SetText(string text)
{
this.Message.Text = text;
}
- 现在,在从父窗口调用show方法之前调用此方法:
bpw.SetText(selectedItem.PropertyWithTheText);
这应该有用。
无论如何,你应该看看MVVM来解决这类问题; - )