Я могу получить привязку со строгим контролем типов в WPF/XAML?

Несколько лет спустя просто добавить еще одно простое базовое 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
15
задан loraderon 11 March 2009 в 07:49
поделиться

4 ответа

Нет, текущая спецификация не имеет строгого контроля типов в Xaml. Я полагаю, что с.Net 4.0, Xaml должен видеть способность к дженерикам. С этим я думал бы, что должно быть намного легче иметь строгий контроль типов в Xaml.

3
ответ дан 1 December 2019 в 04:47
поделиться

Нет. 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>
3
ответ дан 1 December 2019 в 04:47
поделиться

Можно записать каждую отдельную привязку способом со строгим контролем типов:

<TextBox Text="{Binding Path=(vm:Site.Contact).(vm:Contact.Name)}" />

Однако это не проверило бы то, что TextBox DataContext имеет тип ViewModel. Сайт (и я думаю, что это не возможно, но я могу быть неправым).

4
ответ дан 1 December 2019 в 04:47
поделиться

Попробуйте это:

<Window>
    <Window.Resources>
        <DataTemplate x:Key="TypedTemplate" DataType="{x:Type myViewModel}">
            ...
        </DataTemplate>
    </Window.Resources>

    <ContentPresenter Content="{Binding}" Template="{StaticResource TypedTemplate}" />
</Window>

я не протестировал этот код, но он должен дать Вам идею. Предъявитель содержания отобразит текущий DataContext, который будет использовать DataTemplate. Это не со строгим контролем типов в компиляторе, но сразу бросит ошибку периода выполнения на загрузку (в InitializeComponent окна). Необходимо быть в состоянии поймать это легко в тестировании, если что-то повреждается.

0
ответ дан 1 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: