我遇到了一个我无法解决的问题,虽然我已经看了几个类似的帖子,但我找不到任何可以解释我情况的内容。
基本上我有一个WPF窗口:
<Window x:Class="NewGame">
<DataContext="{Binding RelativeSource={RelativeSource Self}}"/>
在类中,我实现了INotifyPropertyChanged,以利用我设置为使用XAML动态更新的某些属性的绑定。例如,我有一个DB,它为团队列出了主要,次要和修剪颜色(十六进制代码),并且属性会根据更改团队自动更新。所以我在XAML中使用以下各种方法自动更新BorderBrush,Foreground和Backgrounds:
<Foreground="{Binding Path=MyPrimColor}">
<Background={Binding Path=MySecColor}">
<BorderBrush={Binding Path=MyTrimColor}">
等...每个都可以是任何属性,无关紧要,这些都可以正常工作。
现在,我有一个DataGrid,我需要绑定到DataTable来显示团队中的玩家,这就是我遇到问题的地方。它告诉我在使用Itemsource&#34;之前,&#34; Items Collection必须是空的。并引发异常。在我开始在XAML中使用数据绑定之前,这一直不是问题,当我在代码中设置了一些东西,一切正常时,但我也知道这不是事情应该完成的方式,这就是为什么我希望让它与XAML数据绑定一起使用。
我创建了MyDT属性作为DataTable,当我尝试绑定时
<DataGrid DataContext="{Binding Path=MyDT}">
,它会导致Foreground和Background绑定路径尝试绑定到Data.DataTable对象,这显然会引发错误。
我看到有人说我需要在<DataGrid.DataContext>
内使用<datagrid>
,但我还没有得到这个。我理解问题的来源---我已经将绑定设置在更高的级别,但我只是不知道如何通过仅将DataGrid绑定到DT属性而在其他方面将其固定在XAML中绑定到类级别。
以下是XAML中的完整代码部分:
<DataGrid x:Name="TeamRosterDT"
Height="400"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
Foreground="{Binding Path=MyTrimColor}"
RowBackground="{Binding Path=MySecColor}"
AlternatingRowBackground="{Binding Path=MyPrimColor}"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserResizeColumns="False"
ColumnWidth="Auto"
HorizontalScrollBarVisibility="Visible"
ItemsSource="{Binding}"
Opacity="0.8"
VerticalScrollBarVisibility="Visible"
Visibility="Hidden"
DataContext="{Binding Path=MyDT}">
<DataGridColumnHeader Style="{StaticResource DataGridHeaderStyle}" />
<DataGridCell HorizontalContentAlignment="Center" />
</DataGrid>
答案 0 :(得分:0)
无需更改DataContext(DataContext="{Binding Path=MyDT}"
),仅绑定ItemsSource(<DataGrid ItemsSource="{Binding Path=MyDT}">
或<DataGrid ItemsSource="{Binding Path=MyDT.DefaultView}">
)
由于不正确的项声明(带有DataGridColumnHeader,DataGridCell的行)而抛出异常。它们被添加到项目列表中,在设置ItemsSource时不支持
答案 1 :(得分:0)
我通过使用:
解决了(我相信)异常plm
然而,DataTable没有正确更新---当XAML初始化时,它是一个空DB,然后根据选择的团队填充和过滤。选择新团队后,只需过滤DT,而不是重新填充。但是,因为我认为这在技术上并不是一个变化的&#34;对于DT本身,它不会触发OnPropertyChanged事件。如何使用XAML触发器正确更新它,或者是在DB重新过滤时我可以使用的事件?
我会使用ObservableCollection吗?