Wpf TextBlock绑定到选定的DataGrid元素

Wpf TextBlock绑定到选定的DataGrid元素,wpf,xaml,data-binding,datagrid,textblock,Wpf,Xaml,Data Binding,Datagrid,Textblock,有人知道如何动态设置textblock.text绑定的ElementName吗 我有两个具有相同信息的数据网格,但第二个数据网格只是同一数据源的过滤器,但我想要的是将文本块的文本绑定到所选项目,这取决于在主数据网格还是辅助数据网格中单击该项目 我有下面的代码将textblock绑定到一个datagrid,但是如果用户单击secondDataGrid中的某个项目,我也希望发生同样的情况 这可能吗 <TextBlock Margin="29,0" Text="{Binding Selected

有人知道如何动态设置textblock.text绑定的ElementName吗

我有两个具有相同信息的数据网格,但第二个数据网格只是同一数据源的过滤器,但我想要的是将文本块的文本绑定到所选项目,这取决于在主数据网格还是辅助数据网格中单击该项目

我有下面的代码将textblock绑定到一个datagrid,但是如果用户单击secondDataGrid中的某个项目,我也希望发生同样的情况

这可能吗

<TextBlock Margin="29,0" Text="{Binding SelectedItem.Name, ElementName=MainDataGrid}"

这是可能的,尽管我认为这不是合适的解决方案

您可以在代码隐藏中处理一个DataGrids事件,您可以在处理程序中编写以下代码:

BindingOperations.SetBinding(textBlock, TextBlock.TextProperty,
                             new Binding("SelectedItem.Name")
                             {
                                 ElementName = "DataGrid1"
                             });
基本上,您可以使用以下代码重置TextBlock的Text属性上的绑定,其中:

  • textBlock是您的textBlock的名称

  • 使用TextBlock.TextProperty,您可以定义要使用TextBlock上的Text属性

  • 第三个参数是新绑定本身。构造函数采用绑定的路径,然后在“body”中设置ElementName

如果DataGrid1触发事件,则将ElementName设置为该DataGrid的名称;如果DataGrid2触发事件,则将ElementName设置为第二个DataGrid的名称

SelectionChanged可能是一个很好的事件,可以在两个DataGrid上处理,但是如果您想在第一个中选择and元素时更新TextBlock,那么在第二个中选择另一个,然后单击back返回到要更新的第一个元素,那么您还需要处理GotFocus事件。 玩一下,你就会明白我的意思了

我的工作示例:

private void SetBindingOnTextBlock(string elementName)
{
    BindingOperations.SetBinding(textBlock, TextBlock.TextProperty, new Binding("SelectedItem.Name")
    {
        ElementName = elementName
    });
}

private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    SetBindingOnTextBlock("DataGrid1");
}

private void DataGrid_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
{
    SetBindingOnTextBlock("DataGrid2");
}

private void DataGrid1_GotFocus(object sender, RoutedEventArgs e)
{
    SetBindingOnTextBlock("DataGrid1");
}

private void DataGrid2_GotFocus(object sender, RoutedEventArgs e)
{
    SetBindingOnTextBlock("DataGrid2");
}
更新1:

设置


如果ItemsSources相同,它可能会解决您的问题。(不确定这是否是@dkozl的意思)最初我认为它们是不同的。

这是可能的,尽管我认为这不是正确的解决方案

您可以在代码隐藏中处理一个DataGrids事件,您可以在处理程序中编写以下代码:

BindingOperations.SetBinding(textBlock, TextBlock.TextProperty,
                             new Binding("SelectedItem.Name")
                             {
                                 ElementName = "DataGrid1"
                             });
基本上,您可以使用以下代码重置TextBlock的Text属性上的绑定,其中:

  • textBlock是您的textBlock的名称

  • 使用TextBlock.TextProperty,您可以定义要使用TextBlock上的Text属性

  • 第三个参数是新绑定本身。构造函数采用绑定的路径,然后在“body”中设置ElementName

如果DataGrid1触发事件,则将ElementName设置为该DataGrid的名称;如果DataGrid2触发事件,则将ElementName设置为第二个DataGrid的名称

SelectionChanged可能是一个很好的事件,可以在两个DataGrid上处理,但是如果您想在第一个中选择and元素时更新TextBlock,那么在第二个中选择另一个,然后单击back返回到要更新的第一个元素,那么您还需要处理GotFocus事件。 玩一下,你就会明白我的意思了

我的工作示例:

private void SetBindingOnTextBlock(string elementName)
{
    BindingOperations.SetBinding(textBlock, TextBlock.TextProperty, new Binding("SelectedItem.Name")
    {
        ElementName = elementName
    });
}

private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    SetBindingOnTextBlock("DataGrid1");
}

private void DataGrid_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
{
    SetBindingOnTextBlock("DataGrid2");
}

private void DataGrid1_GotFocus(object sender, RoutedEventArgs e)
{
    SetBindingOnTextBlock("DataGrid1");
}

private void DataGrid2_GotFocus(object sender, RoutedEventArgs e)
{
    SetBindingOnTextBlock("DataGrid2");
}
更新1:

设置


如果ItemsSources相同,它可能会解决您的问题。(不确定这是否是@dkozl的意思)最初我假设它们是不同的。

它们共享相同的
itemsource
?如果选择了一个
数据网格中的项目,则“是”就可以了。另一个
数据网格将自动选择
数据网格中的项目(已同步的选定项目)。它们共享相同的项目源,但我不熟悉已同步的选定项目。。你能进一步解释一下吗?它们是否共享相同的
项目资源?如果选择了一个
数据网格中的项目,则“是”就可以了。另一个
数据网格将自动选择
数据网格中的项目(已同步的选定项目)。它们共享相同的项目源,但我不熟悉已同步的选定项目。。你能进一步解释一下吗?这看起来是可行的,但如果可以的话,我希望把它全部保存在xaml中。如果没有其他结果,我将尝试这种方法。谢谢,成功了!我想一定是我错过了一些简单的东西。我是wpf的新手,所以这是一个学习过程。。您知道使用IsSynchronizedWithCurrentItem=“True”有什么缺点吗?@ExcelNoobie25目前我还不知道。读一点书来了解这里发生的事情:这个例子是您的场景的一个简单版本。答案中还有一个。祝WPF好运!;)这看起来会起作用,但如果可以的话,我希望把它全部保存在xaml中。如果没有其他结果,我将尝试这种方法。谢谢,成功了!我想一定是我错过了一些简单的东西。我是wpf的新手,所以这是一个学习过程。。您知道使用IsSynchronizedWithCurrentItem=“True”有什么缺点吗?@ExcelNoobie25目前我还不知道。读一点书来了解这里发生的事情:这个例子是您的场景的一个简单版本。答案中还有一个。祝WPF好运!;)