Я в процессе внедрения шаблона MVVC, и у меня возникли проблемы с привязкой свойства в viewmodel изнутри DataTemplate в datagrid. Если у меня есть текстовый блок вне DataTemplate в столбце, он отлично работает (поскольку я непосредственно ссылаюсь на datacontext UserConrol, то есть на виртуальную машину), однако изнутри DataTemplate он не вернет свойство простого текста. Однако он вернет свойство из итерированного элемента IEnumerable.Silverlight DataGrid.Celltemplate Binding to ViewModel
<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. (Заметьте, я знаю, что 1-й текстовый блок вне DG не нуждается в ElementName и т. Д., Но я только что сделал это, чтобы доказать себе, что его ссылка на правильную вещь)
Сообщение Jaime относится только к WPF, но определенно объясняет, почему это не работает как в WPF, так и в Silverlight. Однако обходной путь в сообщении Хайме не будет работать для привязки данных между элементами, поэтому он не решает эту проблему. –