Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataTemplate中的按钮如何注册并侦听代码中按钮的已加载事件,但可以';无法访问数据上下文?_C#_Mvvm_Uwp_Uwp Xaml - Fatal编程技术网

C# DataTemplate中的按钮如何注册并侦听代码中按钮的已加载事件,但可以';无法访问数据上下文?

C# DataTemplate中的按钮如何注册并侦听代码中按钮的已加载事件,但可以';无法访问数据上下文?,c#,mvvm,uwp,uwp-xaml,C#,Mvvm,Uwp,Uwp Xaml,我不明白为什么datatemplate中的按钮可以知道加载的事件在代码隐藏中,但不能简单地将代码隐藏用作数据上下文 我知道解决这个问题的解决方案,但我不确定为什么将命令绑定到datatemplate中的按钮不容易 Xaml 这取决于XAML编译器处理事件的方式以及DataContext的工作方式。在按钮上指定eventhandler时,XAML编译器会生成如下内容: var button1=Page.GetElement(“ButtonTemplate”)//获得按钮的一些魔力 button1.

我不明白为什么datatemplate中的按钮可以知道加载的事件在代码隐藏中,但不能简单地将代码隐藏用作数据上下文

我知道解决这个问题的解决方案,但我不确定为什么将命令绑定到datatemplate中的按钮不容易

Xaml


这取决于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)
        {

        }