在 Telerik RadGridView 中传递 DataContext
本文关键字:DataContext Telerik RadGridView | 更新日期: 2023-09-27 18:34:18
我使用Telerik的c# .NET 4.5和WPF RadControls。
在我的MainWindow
我有一个RadTabControl
,在我的代码后面,我像这样绑定我的MainViewModel
:
this.DataContext = new MainViewmodel();
RadTabControl
的ItemSource
绑定在 XAML 中:
<telerik:RadTabControl ... ItemsSourc={Binding Tabs} .. />
我还使用ContentSelector
将不同的内容加载到我的选项卡中。这些内容UserControls
.在一个UserControl
,我使用了一个RadGRidView
,它有自己的ItemsSource
,我绑定在代码后面:
TestGridView.ItemsSource = Tasks.GetTasks();
RadGridView Columns
绑定到自己的风格:
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn DataMemberBinding="{Binding ID}" Width="*" CellStyle="{StaticResource CellStyle}" />
</telerik:RadGridView.Columns>
<Style x:Key="CellStyle" TargetType="{x:Type telerik:GridViewCell}">
<Setter Property="BorderThickness" Value="0" />
<Setter Property="BorderBrush" Value="{x:Null}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border BorderBrush="#f2f2f2" BorderThickness="0,0,0,2" Padding="0,5,0,5">
<StackPanel Orientation="Horizontal">
<StackPanel Orientation="Vertical" Margin="10,0,0,0" VerticalAlignment="Top">
<TextBlock Text="{Binding Titel}" />
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Start}" Foreground="#9fa2ae"/>
<TextBlock Text=" XXX - XXX " />
<TextBlock Text="{Binding Startzeit}" Foreground="#9fa2ae" />
<telerik:RadButton Height="30" Content="Right Button" Command="{Binding AddTabCommand}" CommandParameter="Tab9999"/>
</StackPanel>
</StackPanel>
</StackPanel>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
问题是RadButton
不会触发我的MainViewModel
DelegateCommand
。我在RadGridView
的用户控件中也有相同的按钮,这工作正常。
请有人告诉我如何解决RadGridView
RadButton
的问题?
多谢此致敬意RR
PS:我有一个简单的项目,但无法附加
发生这种情况的原因是 RadButton 上的绑定试图在按钮的 DataContext 上找到 AddTabCommand,而不是父窗口。
要解决此问题,我建议在窗口的资源中设置样式,而不是使用它:
Command="{Binding AddTabCommand}"
为窗口命名,并使用以下名称:
Command="{Binding ElementName=windowName, Path=DataContext.AddTabCommand}"
同意Mike所说的,在你的DataContext(ViewModel)中找不到AddTabCommand。您可以尝试指定命令的整个路径:
命令="{Binding ElementName=windowName, Path=NameSapce_Name.ViewModelName.AddTabCommand}"。