2017-01-03 3 views
1

Я привязка DataGrid к ICollectionView, так что я могу эффективно фильтровать ItemsSource, но ICollectionView не generic типа (как в CollectionView<MyType>) - это типа List<object>. Поэтому в редакторе XAML VisualStudio не может определить, что такое тип, поэтому я не получаю никакой привязки IntelliSense к свойствам объекта в представлении коллекции. Он по-прежнему работает и работает, но я не получаю помощь во время разработки.Как указать тип ItemsSource DataGrid в XAML?

Переформулировка вопроса: Есть ли способ «привязать» привязку данных в XAML?

Я думал, что я мог бы сделать что-то с <DataGrid.DataContext>, но я не могу вспомнить, что это было, и у меня не было никакой удачи погуглить за это либо:

XAML:

<DataGrid ItemsSource="{Binding MyCollectionView}"> 
    <DataGrid.DataContext> 
     <!-- Specify the type of objects in MyCollectionView somehow - 
       something like 'x:type="MyType"' --> 
    </DataGrid.DataContext> 
    <DataGrid.RowStyle> 
     <Style TargetType="DataGridRow"> 
      <Style.Triggers> 
       <!-- Cannot resolve property 'Approved' in data context of type 'MyProject.MainWindow'. --> 
       <DataTrigger Binding="{Binding Approved}" Value="False"> 
        <Setter Property="Background" Value="LightGray" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.RowStyle> 
    <DataGrid.Columns> 
     <!-- Cannot resolve property 'Approved' in data context of type 'object'. --> 
     <DataGridTextColumn Header="Is Approved" 
          Binding="{Binding Approved}" 
          Width="3*" /> 
    </DataGrid.Columns> 
</DataGrid> 

Код Behind :

public partial class MainWindow : Window, INotifyPropertyChanged 
{ 
    public ICollectionView MyCollectionView { get; set; } 

    public MainWindow(List<MyType> parameter) 
    { 
     // ... 

     MyCollectionView = new CollectionView(parameter); 

     // ... 
    } 
} 

public class MyType 
{ 
    public bool Approved { get; set; } 

    // ... 
} 
+0

Вы сделали случай, почему он не работает во время разработки, но вы говорите, что привязка не работает во время выполнения, когда она должна работать? – OmegaMan

+0

«ICollectionView не является общим типом - он имеет тип List « Список '- это общая коллекция. Можем ли мы увидеть, как определяется «MyCollectionView» и как определяется сама коллекция? У объектов в коллекции действительно есть свойство «Утверждено»? Что означает «признанный»? –

+0

@OmegaMan Нет, он все еще строит и работает. Мой вопрос заключается в том, как указать во время разработки, что 'ItemsSource' на самом деле' List ', а не' List '- получение всей совершенности IntelliSense и проверки подлинности. Я обновил свой вопрос, чтобы ответить на ваш комментарий. – tehDorf

ответ

2

Я думал, что я мог бы сделать что-то с, но я не могу вспомнить, что это было, и у меня не было никакой удачи погуглить за это либо:

Я считаю, что установка данных времени проектирования контекст - это то, что вы ищете. Для получения дополнительной информации об этом обратитесь к следующим ссылкам.

XAML: Intellisense для привязки и контекст данных: https://blogs.msmvps.com/deborahk/xaml-intellisense-for-bindings-and-the-data-context/ How to see design-time data-binding in XAML editor (it works in runtime)?

То, что я пытаюсь спросить, есть ли какой-нибудь способ «слепок» привязки данных в виде набора MyType в XAML?

Нет. Но вы можете указать DataContext времени разработки, как описано выше.

+0

Ссылка MS MVP имела то, что я искал: 'd: DataContext =" {d: DesignInstance Type = vms: CustomerListViewModel, IsDesignTimeCreatable = True} "' – tehDorf

0

VisualStudio не может определить, какой тип

Поскольку тип не выражается до времени исполнения и получен с помощью отражения от кода, разработчик находится в невыгодном положении и может только экстраполировать то, что он знает. И все это знает является то, что это object, но не точный тип, который разработчик знает.

Я не получаю IntelliSense помощь ... до сих пор строит и работает, но я не получаю помощь во время разработки

Если это вопрос, который держит вас назад, Я рекомендую временно добавить список соответствующего типа свойств в VM (или страницу, если не MVVM), а затем привязать к этому новому свойству. Тогда время разработки будет см., что ему нужно, и вы можете получить информацию о свойствах, добавляя привязки/стили с помощью визуальной студии.

Как только все будет хорошо, замените время, связанное с дизайном, на упомянутое вами сообщение ICollection.

+0

Да, я понимаю это - я знаю, в чем проблема. Я пытаюсь спросить, есть ли способ «привязать» привязку данных в виде коллекции «MyType» в XAML? – tehDorf

+0

@tehDorf, Насколько мне известно, нет, нет способа отбросить его в XAML. – OmegaMan

 Смежные вопросы

  • Нет связанных вопросов^_^