C# DataTemplate中的按钮如何注册并侦听代码中按钮的已加载事件,但可以';无法访问数据上下文?
我不明白为什么datatemplate中的按钮可以知道加载的事件在代码隐藏中,但不能简单地将代码隐藏用作数据上下文 我知道解决这个问题的解决方案,但我不确定为什么将命令绑定到datatemplate中的按钮不容易 XamlC# DataTemplate中的按钮如何注册并侦听代码中按钮的已加载事件,但可以';无法访问数据上下文?,c#,mvvm,uwp,uwp-xaml,C#,Mvvm,Uwp,Uwp Xaml,我不明白为什么datatemplate中的按钮可以知道加载的事件在代码隐藏中,但不能简单地将代码隐藏用作数据上下文 我知道解决这个问题的解决方案,但我不确定为什么将命令绑定到datatemplate中的按钮不容易 Xaml 这取决于XAML编译器处理事件的方式以及DataContext的工作方式。在按钮上指定eventhandler时,XAML编译器会生成如下内容: var button1=Page.GetElement(“ButtonTemplate”)//获得按钮的一些魔力 button1.
这取决于XAML编译器处理事件的方式以及DataContext的工作方式。在按钮上指定eventhandler时,XAML编译器会生成如下内容:
var button1=Page.GetElement(“ButtonTemplate”)//获得按钮的一些魔力
button1.Loaded+=Page.DeleteButton\u Loaded;
按钮本身实际上并不知道事件,而是由XAML生成的代码将事件挂接到相应的按钮上
另一方面,系统对DataContext的处理方式不同。DataContext是向下传播的东西。因此,您的按钮DataContext是通过遍历可视化树并找到为您提供DataContext的第一个元素来确定的。可能是datatemplate中的xbind有问题。.是的,x:bind无法正常工作。但我想知道为什么我不能简单地将codebehind作为datacontext访问,但我可以为事件访问它。。。。我在Alamakanambra修改了它
<grid:RadDataGrid Margin="0" ItemsSource="{x:Bind _viewModel.Data, Mode=OneWay}" Width="600" HorizontalAlignment="Left">
<grid:RadDataGrid.Columns>
<grid:DataGridTemplateColumn Header="Delete" SizeMode="Fixed">
<grid:DataGridTemplateColumn.CellContentTemplate>
<DataTemplate>
<StackPanel x:Name="stackPanel" Style="{StaticResource ResourceKey=RadDataGridButtonPanel}">
<Button Command="{Binding _viewModel.DeleteCommand, ElementName=deleteView}" Loaded="DeleteButton_Loaded">
</Button>
</StackPanel>
</DataTemplate>
</grid:DataGridTemplateColumn.CellContentTemplate>
</grid:DataGridTemplateColumn>
</grid:RadDataGrid.Columns>
</grid:RadDataGrid>
private readonly ViewModel _viewModel;
public DeleteView()
{
this.InitializeComponent();
_viewModel = new ViewModel();
this.DataContext = _viewModel;
}
private void DeleteButton_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
}