[英]How do I specify a DataGrid's ItemsSource type in XAML?
我将DataGrid
绑定到ICollectionView
以便可以有效地过滤ItemsSource,但是ICollectionView
不是泛型类型(如CollectionView<MyType>
)-类型为List<object>
。 因此,在XAML编辑器中,VisualStudio无法确定类型是什么,因此我没有任何IntelliSense帮助绑定到集合视图中对象的属性。 它仍然可以构建和运行,但是在设计时我没有得到帮助。
换个问题:换句话说,是否有“广播” 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>
背后的代码:
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; }
// ...
}
我以为可以做些什么,但我不记得它是什么,也没有运气来找它:
我相信设置设计时间数据上下文是您要寻找的。 请参考以下链接以获取更多信息。
XAML:绑定和数据上下文的智能感知: https : //blogs.msmvps.com/deborahk/xaml-intellisense-for-bindings-and-the-data-context/ 如何在XAML编辑器中查看设计时数据绑定(它在运行时有效)?
我想问的是,是否有任何方法可以将数据绑定“投射”为XAML中的MyType集合?
否。但是您可以如上所述指定设计时DataContext。
VisualStudio无法确定类型是什么
由于类型直到运行时才表达出来,并通过代码的反射来获取,因此设计者处于不利地位,只能对其了解的内容进行推断。 它所知道的只是它是一个object
而不是开发人员知道的确切类型。
我没有得到任何IntelliSense帮助...仍在构建和运行,但在设计时却没有得到帮助
如果那是使您退缩的问题,建议您将有问题的属性类型的列表临时添加到VM(如果不是MVVM,则添加页面),然后绑定到该新属性。 然后,设计的时候会看到它需要什么,你可以得到属性信息添加绑定/风格与Visual Studio的帮助。
一旦一切顺利,就将设计时绑定替换为您提到的ICollection
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.