Wpf TextBlock绑定到选定的DataGrid元素
有人知道如何动态设置textblock.text绑定的ElementName吗 我有两个具有相同信息的数据网格,但第二个数据网格只是同一数据源的过滤器,但我想要的是将文本块的文本绑定到所选项目,这取决于在主数据网格还是辅助数据网格中单击该项目 我有下面的代码将textblock绑定到一个datagrid,但是如果用户单击secondDataGrid中的某个项目,我也希望发生同样的情况 这可能吗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 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好运!;)