如何在其他用户控件中按名称查找元素?
How to find an element by name in other user control?
我有一个用户控件 (MainView
) 和另一个用户控件 (GridView
):
<local:MyGridView x:Name="GridView"/>
在我的 MainView
中,我有一个按钮:
<Button Command="{Binding TestCommand}"
CommandParameter="{Binding ElementName=DataGrid}"
Content="Test"/>
在我的 GridView
中,我有一个要作为 CommanParameter
发送的数据网格。
如果 GridView
代码在 MainView
代码中,则此语法有效。我应该改变什么?
我尝试了 {Binding ElementName=GridView.DataGrid}
- 没有成功。
很简单。
<local:MyGridView x:Name="**GridView**"/>
<Button Command="{Binding TestCommand}"
CommandParameter="{Binding ElementName=**GridView**}"
Content="Test"/>
您应该将 ElementName 从 DataGrid 更改为 GridView。
您不能使用 ElementName
直接引用在另一个控件或名称范围中定义的元素。
您可以将 属性 添加到 MyGridView.xaml.cs
以公开 DataGrid
控件:
public DataGrid DataGrid => dataGrid1;
然后您可以绑定到此 属性 元素:
<Button Command="{Binding TestCommand}"
CommandParameter="{Binding Path=DataGrid, ElementName=GridView}"
Content="Test"/>
更好的方法是使用共享 DataContext
(视图模型)并将两个控件绑定到这个控件的属性。
我有一个用户控件 (MainView
) 和另一个用户控件 (GridView
):
<local:MyGridView x:Name="GridView"/>
在我的 MainView
中,我有一个按钮:
<Button Command="{Binding TestCommand}"
CommandParameter="{Binding ElementName=DataGrid}"
Content="Test"/>
在我的 GridView
中,我有一个要作为 CommanParameter
发送的数据网格。
如果 GridView
代码在 MainView
代码中,则此语法有效。我应该改变什么?
我尝试了 {Binding ElementName=GridView.DataGrid}
- 没有成功。
很简单。
<local:MyGridView x:Name="**GridView**"/>
<Button Command="{Binding TestCommand}"
CommandParameter="{Binding ElementName=**GridView**}"
Content="Test"/>
您应该将 ElementName 从 DataGrid 更改为 GridView。
您不能使用 ElementName
直接引用在另一个控件或名称范围中定义的元素。
您可以将 属性 添加到 MyGridView.xaml.cs
以公开 DataGrid
控件:
public DataGrid DataGrid => dataGrid1;
然后您可以绑定到此 属性 元素:
<Button Command="{Binding TestCommand}"
CommandParameter="{Binding Path=DataGrid, ElementName=GridView}"
Content="Test"/>
更好的方法是使用共享 DataContext
(视图模型)并将两个控件绑定到这个控件的属性。