Несколько лет спустя просто добавить еще одно простое базовое R-решение, которое по какой-то причине отсутствует здесь xtabs
xtabs(Frequency ~ Category, df)
# Category
# First Second Third
# 30 5 34
Или, если хотите data.frame
назад
as.data.frame(xtabs(Frequency ~ Category, df))
# Category Freq
# 1 First 30
# 2 Second 5
# 3 Third 34
Нет, текущая спецификация не имеет строгого контроля типов в Xaml. Я полагаю, что с.Net 4.0, Xaml должен видеть способность к дженерикам. С этим я думал бы, что должно быть намного легче иметь строгий контроль типов в Xaml.
Нет. FrameworkElement.DatatContext
свойство зависимости, которое включает привязку данных, имеет тип object
.
, Как указано другими, можно определить ожидаемый тип DataContext
для специального шаблона, названного DataTemplate
. Много средств управления такой как ItemsControl
, ControlControl
обеспечивают доступ к DataTemplates, чтобы позволить Вам устанавливать ожидания визуального представления типа DataContext.
Bryan корректен, он не протестировал свой код.
соответствующее приложение введенного DataTemplate похоже на это:
<Window>
<Window.Resources>
<DataTemplate x:Key="TypedTemplate" DataType="{x:Type myViewModel}">
...
</DataTemplate>
</Window.Resources>
<ContentControl Content="{Binding}" ContentTemplate="{StaticResource TypedTemplate}" />
</Window>
ContentPresenter наследовался непосредственно FrameworkElement и не имеет свойства Template. Кроме того, свойство Template обычно относится для Управления. Шаблон типа ControlTemplate, который является чем-то совершенно различным, чем DataTemplate.
я думаю, что Bryan думал ContentControl
, который является одним из двух корневых типов управления (другой являющийся ItemsControl
). ContentControl
действительно на самом деле наследовался Управлению. Поэтому мы можем определить свойство Template на нем если мы, так выберите.
<Window>
<Window.Resources>
<DataTemplate x:Key="TypedTemplate" DataType="{x:Type myViewModel}">
...
</DataTemplate>
<ControlTemplate x:Key="ControlSkin" TargetType="{x:Type ContentControl}">
...
</ControlTemplate>
</Window.Resources>
<ContentControl Content="{Binding}" ContentTemplate="{StaticResource TypedTemplate}" Template="{StaticResource ControlSkin}" />
</Window>
Можно записать каждую отдельную привязку способом со строгим контролем типов:
<TextBox Text="{Binding Path=(vm:Site.Contact).(vm:Contact.Name)}" />
Однако это не проверило бы то, что TextBox DataContext имеет тип ViewModel. Сайт (и я думаю, что это не возможно, но я могу быть неправым).
Попробуйте это:
<Window>
<Window.Resources>
<DataTemplate x:Key="TypedTemplate" DataType="{x:Type myViewModel}">
...
</DataTemplate>
</Window.Resources>
<ContentPresenter Content="{Binding}" Template="{StaticResource TypedTemplate}" />
</Window>
я не протестировал этот код, но он должен дать Вам идею. Предъявитель содержания отобразит текущий DataContext, который будет использовать DataTemplate. Это не со строгим контролем типов в компиляторе, но сразу бросит ошибку периода выполнения на загрузку (в InitializeComponent окна). Необходимо быть в состоянии поймать это легко в тестировании, если что-то повреждается.