微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Silverlight DataGrid.Celltemplate绑定到ViewModel

我正在处理MVVC模式,并且在数据网格中的DataTemplate中绑定viewmodel中的属性时遇到问题.如果我在列中的DataTemplate外面有一个文本块,它工作正常(因为我直接引用UserConrol的datacontext,即VM),但是从DataTemplate中它不会返回纯文本属性.然而,它将从迭代的IEnumerable项返回一个属性.

<UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"  
    x:Class="Timesheet.Silverlight.Modules.Views.HistoryView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     
    xmlns:Commands="clr-namespace:Microsoft.Practices.Composite.Presentation.Commands;assembly=Microsoft.Practices.Composite.Presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:viewmodels="clr-namespace:Timesheet.Silverlight.Modules.viewmodels" 
   x:Name="View">
    <StackPanel>            
    <TextBlock Text="{Binding Path=DataContext.testText,ElementName=View}" />    
            <data:DataGrid  Height="280" Width="500" ItemsSource="{Binding TimeSlots}" AutoGenerateColumns="False" >                        
            <data:DataGrid.Columns>
                <data:DataGridTextColumn Header="Allocation Area" Binding="{Binding TimeAllocationArea.TimeAllocationName}" Width="200" />
                <data:DataGridTextColumn Header="Start" Binding="{Binding StartTime}" Width="80" />
                <data:DataGridTextColumn Header="End" Binding="{Binding Path=DataContext.testText,ElementName=View}" Width="80" />
                <data:DataGridTemplateColumn Header="Modify" Width="200" >
                    <data:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="{Binding Path=DataContext.testText,ElementName=View}" />
                            </StackPanel>
                        </DataTemplate>
                    </data:DataGridTemplateColumn.CellTemplate>
                </data:DataGridTemplateColumn>
            </data:DataGrid.Columns>
        </data:DataGrid>    
    </StackPanel>
</UserControl>

我忽略了DataTemplate是否存在某种问题?请注意,“{Binding Path = DataContext.testText,ElementName = View}”适用于除DataTemplate中的所有元素之外的所有元素. (注意我知道DG之外的第一个Textblock不需要ElementName等,但我这样做是为了向自己证明它引用了正确的东西)

解决方法

我不知道这是否适用于SL,但您可以查看:

“Columns集合只是Datagrid中的一个属性;此集合不在逻辑(或可视)树中,因此DataContext不会被继承,这导致无法绑定任何内容.”

http://blogs.msdn.com/jaimer/archive/2008/11/22/forwarding-the-datagrid-s-datacontext-to-its-columns.aspx

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐