<p>NULLIF-如果传入的两个值相同,则返回 NULL。</p> “项集合在使用 ItemsSource 之前必须为空。”

XAML

<ListView Name="ListViewImages"
SelectionMode="Single"
ItemsSource="{Binding}">
<local:ImageView />
</ListView>

我在这一行上放了一个断点。 ListViewImages.ItemsSource就是在 LINQ 赋值之前的 Nothing

181763 次浏览

我会用这种语法。它实现了与 Josh 和 Chris 的建议相同的功能,但它的优势是符合 ANSI 标准,并且不依赖于特定的数据库供应商。

select count(case when myColumn = 1 then 1 else null end)
from   AD_CurrentView

引发此特定异常的原因是元素的内容应用于 ListView 的 Items 集合。因此,XAML 在其 Items集合中使用单个 local:ImageView初始化 ListView。但是,当使用 ItemsControl 时,必须使用 Items属性或 ItemsSource属性,不能同时使用这两个属性。因此,当处理 ItemsSource 属性时会引发异常。

控件必须使用 Items属性或 ItemsSource属性,不能同时使用这两个属性。因此,当处理 ItemsSource 属性时会引发异常。

通过在类上查找 ContentPropertyAttribute,可以找到元素的内容将应用到哪个属性。在这种情况下,它在类层次结构中位于 ItemsControl 上的 定义更高:

[ContentPropertyAttribute("Items")]

通过在类上查找 ContentPropertyAttribute,可以找到元素的内容将应用到哪个属性。在这种情况下,它在类层次结构中位于 ItemsControl 上的 定义更高:

[ContentPropertyAttribute("Items")]

这里的意图是将 ListView 的 View 设置为 local: ImageView,因此修复程序将显式指示要设置的属性。

这里的意图是将 ListView 的 View 设置为 local: ImageView,因此修复程序将显式指示要设置的属性。

修复了 XAML,异常就消失了:

<ListView Name="ListViewImages"
SelectionMode="Single"
ItemsSource="{Binding}">
<ListView.View>
<local:ImageView />
</ListView.View>
</ListView>

修复了 XAML,异常就消失了:

<ListView Name="ListViewImages"
SelectionMode="Single"
ItemsSource="{Binding}">
<ListView.View>
<local:ImageView />
</ListView.View>
</ListView>

没有 <ListView.View>的标签。

为什么不像这样?

SELECT count(1)
FROM AD_CurrentView
WHERE myColumn=1

我已经安排好了

<wpftoolkit:DataGrid
AutoGenerateColumns="False"
ItemsSource="{Binding Path=Accounts}" >
<wpftoolkit:DataGrid.Columns>
<wpftoolkit:DataGridTextColumn
Header="Account Name"
Binding="{Binding Path=AccountName}" />
</wpftoolkit:DataGrid.Columns>
</wpftoolkit:DataGrid>

加上乔什的回答,

SELECT COUNT(CASE WHEN myColumn=1 THEN AD_CurrentView.PrimaryKeyColumn ELSE NULL END)
FROM AD_CurrentView

我也是。

<ComboBox Cursor="Hand" DataContext="{Binding}"
FontSize="16" Height="27" ItemsSource="{Binding}"
Name="cbxDamnCombo" SelectedIndex="0" SelectedValuePath="MemberId">


<DataTemplate>
<TextBlock DataContext="{Binding}">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} / {1}">
<Binding Path="MemberName"/>
<Binding Path="Phone"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>


</ComboBox>

现在,当您完成丢失的标记 控件。项模板时,一切恢复正常:

<ComboBox Cursor="Hand" DataContext="{Binding}"
FontSize="16" Height="27" ItemsSource="{Binding}"
Name="cbxDamnCombo" SelectedIndex="0" SelectedValuePath="MemberId">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock DataContext="{Binding}">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} / {1}">
<Binding Path="MemberName"/>
<Binding Path="Phone"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
<ComboBox.ItemTemplate>
</ComboBox>

对我来说(在 SQLServer2012中)不需要将“ count”改为“ sum”,同样的逻辑可以移植到其他“条件聚合”。例如,根据条件求和:

SELECT SUM(CASE WHEN myColumn=1 THEN AD_CurrentView.NumberColumn ELSE 0 END)
FROM AD_CurrentView

在 My 的例子中,它只是 ListView 中的一个额外的 StackPanel:

<ListView Name="_details" Margin="50,0,50,0">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Location.LicenseName, StringFormat='Location: {0}'}"/>
<TextBlock Text="{Binding Ticket.Employee.s_name, StringFormat='Served by: {0}'}"/>
<TextBlock Text="{Binding Ticket.dt_create_time, StringFormat='Started at: {0}'}"/>
<Line StrokeThickness="2" Stroke="Gray" Stretch="Fill" Margin="0,5,0,5" />
<ItemsControl ItemsSource="{Binding Items}"/>
</StackPanel>
</StackPanel>
</ListView>

成为:

<ListView Name="_details" Margin="50,0,50,0">
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Location.LicenseName, StringFormat='Location: {0}'}"/>
<TextBlock Text="{Binding Ticket.Employee.s_name, StringFormat='Served by: {0}'}"/>
<TextBlock Text="{Binding Ticket.dt_create_time, StringFormat='Started at: {0}'}"/>
<Line StrokeThickness="2" Stroke="Gray" Stretch="Fill" Margin="0,5,0,5" />
<ItemsControl ItemsSource="{Binding Items}"/>
</StackPanel>
</ListView>
< TextBlock Text = “{ Binding Ticket.dt _ create _ time,StringFormat = ‘ Started at: {0}’}”/>

一切都很好。

我在不同的场景中出现了同样的错误

<ItemsControl ItemsSource="{Binding TableList}">
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl>
< 线条笔触粗细 = “2”笔触 = “灰色”拉伸 = “填充”空白 = “0,5,0,5”/>

解决方案是在 ItemsPanelTemplate之前添加 ItemsControl.ItemsPanel标记

<ItemsControl ItemsSource="{Binding TableList}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
< ItemsControl ItemsSource = “{ Binding Items }”/>

也许这不是一个有用的答案,但是我在更改列顺序时遇到了同样的问题,并且犯了下面示例中的错误。由于有很多列,我对它们进行了重新排序,并在结束标记 /DataGrid.Columns之后粘贴了一个列:

       <DataGridTemplateColumn x:Name="addedDateColumn" Header="Added Date" Width="SizeToHeader">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=AddedDate}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<DataGridTemplateColumn x:Name="rowguidColumn" Header="rowguid" Width="SizeToHeader">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=rowguid}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid>

成为:

<ListView Name="_details" Margin="50,0,50,0">
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Location.LicenseName, StringFormat='Location: {0}'}"/>
<TextBlock Text="{Binding Ticket.Employee.s_name, StringFormat='Served by: {0}'}"/>
<TextBlock Text="{Binding Ticket.dt_create_time, StringFormat='Started at: {0}'}"/>
<Line StrokeThickness="2" Stroke="Gray" Stretch="Fill" Margin="0,5,0,5" />
<ItemsControl ItemsSource="{Binding Items}"/>
</StackPanel>
</ListView>

不管怎样,因为这个浪费了半个小时,希望能帮到其他人。

怎么样

SELECT id, COUNT(IF status=42 THEN 1 ENDIF) AS cnt
FROM table
GROUP BY table

我刚才碰到了这个问题的一个非常隐蔽的例子。我的原始片段要复杂得多,因此很难看到错误。

   <ItemsControl
Foreground="Black"  Background="White" Grid.IsSharedSizingScope="True"
x:Name="MyGrid" ItemsSource="{Binding}">
>
<ItemsControl.ItemsPanel>
<!-- All is fine here -->
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<!-- All is fine here -->
</ItemsControl.ItemTemplate>
<!-- Have you caught the error yet? -->
</ItemsControl>

短于 CASE:)

窃听器?最初打开 <ItemsControl>标签后的额外 ><应用于内置 Items 集合。稍后设置 DataContext 时,会立即出现意外情况。因此,在调试此问题时,不要仅仅注意 ItemsControl 特定数据子元素周围的错误。

因为 COUNT()不计算 null 值,当条件不满足且没有 ELSE时,IF/CASE返回 null。

当我尝试将上下文菜单应用到我的 TreeView时,出现了这个错误。这些尝试最终以一个糟糕的 XAML 结束,这个 XAML 以某种方式编译:

<TreeView Height="Auto" MinHeight="100"  ItemsSource="{Binding Path=TreeNodes, Mode=TwoWay}"
ContextMenu="{Binding Converter={StaticResource ContextMenuConverter}}">
ContextMenu="">
<TreeView.ItemContainerStyle>
...

我认为这比使用 SUM()要好。

注意有问题的一行: ContextMenu="">
T; ... 我不知道它为什么要编译,但我认为值得一提,因为这是一个神秘的异常消息的原因。正如 Armentage 所说,仔细查看 XAML,特别是在您最近编辑的地方。

注意有问题的一行: ContextMenu="">
我不知道它为什么要编译,但我认为值得一提,因为这是一个神秘的异常消息的原因。正如 Armentage 所说,仔细查看 XAML,特别是在您最近编辑的地方。

在我的例子中,它没有为 ItemsControl 使用 DataTemplate。

Ing Path = Property1}”/> < 标签内容 = “{ Binding Path = Property2}”/>

老年人:

<ItemsControl Width="243" ItemsSource="{Binding List, Mode=TwoWay}">
<StackPanel Orientation="Horizontal">
<TextBox Width="25" Margin="0,0,5,0" Text="{Binding Path=Property1}"/>
<Label Content="{Binding Path=Property2}"/>
</StackPanel>
</ItemsControl>

最新消息:

<ItemsControl Width="243" ItemsSource="{Binding List, Mode=TwoWay}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox Width="25" Margin="0,0,5,0" Text="{Binding Path=Property1}"/>
<Label Content="{Binding Path=Property2}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

我的是数据网格风格。如果在样式周围遗漏了 <DataGrid.RowStyle>标签,就会出现这个问题。奇怪的是,有一段时间它是这样工作的。这是错误代码。

 <DataGrid Name="DicsountScheduleItemsDataGrid"
Grid.Column="0"
Grid.Row="2"
AutoGenerateColumns="false"
ItemsSource="{Binding DiscountScheduleItems, Mode=OneWay}">
<Style TargetType="DataGridRow">
<Setter Property="IsSelected"
Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>

还有好的一面

 <DataGrid Name="DicsountScheduleItemsDataGrid"
Grid.Column="0"
Grid.Row="2"
AutoGenerateColumns="false"
ItemsSource="{Binding DiscountScheduleItems, Mode=OneWay}">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="IsSelected"
Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
</DataGrid.RowStyle>
E = OneWay }”>

在 DataGrid.Columns 中保留模板列。这帮助我解决了这个问题。

< DataGrid. RowStyle >

档号: DataGridTemplateColumn: 项集合在使用 ItemsSource 之前必须为空。

< Style TargetType = “ DataGridRow”>

我也犯了同样的错误。问题在于在 ”。SelectedValue > 和 :

<ComboBox
ItemsSource="{Binding StatusTypes}"
DisplayMemberPath="StatusName"
SelectedValuePath="StatusID">
<ComboBox.SelectedValue>
<Binding Path="StatusID"/>
</ComboBox.SelectedValue>
>
</ComboBox>
< Setter 属性 = “ IsSelected”

这是正确的密码:

<ComboBox
ItemsSource="{Binding StatusTypes}"
DisplayMemberPath="StatusName"
SelectedValuePath="StatusID">
<ComboBox.SelectedValue>
<Binding Path="StatusID"/>
</ComboBox.SelectedValue>
</ComboBox>
然而,当 ItemsSource不在使用中时,下面的代码是 允许:

<!--Right-->
<ItemsControl>
<Button.../>
<TextBlock.../>
<sys:String.../>
</ItemsControl>

现在是2022年,最新的 SQL Server 仍然没有 COUNTIF(还有 regex!):

-- Count if MyColumn = 42
SELECT SUM(IIF(MyColumn = 42, 1, 0))
FROM MyTable

注意缺少的 ItemsSource="{Binding MyItems}"部分。

(注意后面的 >,它被解释为内容,所以你设置了两倍的内容... 花了我一点时间:)

当我收到一条代码审查注释说虚函数不需要内联时,我就有了这个问题。

> ,是否最好不要使用内联虚函数,因为它们几乎从来没有展开过?

我认为在直接对对象调用函数的场景中,内联虚函数可能会派上用场。但我想到的反对意见是——为什么要定义虚拟然后使用对象来调用方法呢?

我用于分析的代码片段:

class Temp
{
public:


virtual ~Temp()
{
}
virtual void myVirtualFunction() const
{
cout<<"Temp::myVirtualFunction"<<endl;
}


};


class TempDerived : public Temp
{
public:


void myVirtualFunction() const
{
cout<<"TempDerived::myVirtualFunction"<<endl;
}


};


int main(void)
{
TempDerived aDerivedObj;
//Compiler thinks it's safe to expand the virtual functions
aDerivedObj.myVirtualFunction();


//type of object Temp points to is always known;
//does compiler still expand virtual functions?
//I doubt compiler would be this much intelligent!
Temp* pTemp = &aDerivedObj;
pTemp->myVirtualFunction();


return 0;
}

这是有效的:

<ItemsControl ItemsSource="{Binding TimeSpanChoices}">
<ItemsControl.ItemsPanel> <!-- I am the missing parent! -->
<ItemsPanelTemplate>
<UniformGrid Rows="1" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
...
</ItemsControl>

在函数调用明确且函数适合内联的情况下,编译器足够聪明,可以内联代码。

提供了 <ItemsControl.ItemsPanel>适当的父节点 ^ ^ 。

其余时间“内联虚拟”是一派胡言,实际上有些编译器不会编译这些代码。

我在另一种情况下遇到了这个错误。我尝试直接在 <TreeView>中为 TreeViewItems 定义一个样式,但是应该将其嵌入到 <TreeView.ItemContainerStyle>中。

EViewItemsSource = “{ BindingExampleListView }”>

错:

<TreeView ItemsSource="{Binding ExampleListView}">
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/>
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
</Style>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding SubItemListList}">
...
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>

正确:

<TreeView ItemsSource="{Binding ExampleListView}">
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/>
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding SubItemListList}">
...
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
< Style TargetType = “{ x: Type TreeViewItem }”>

我遇到这个问题是因为在我的 XAML 中缺少一个级别的标记,具体来说是 <ListView.View>

< Setter 属性 = “ IsExtended”值 = “{ Binding IsExExtended,Mode = TwoWay }”/>

这段代码产生了这个错误。

<Grid>
<ListView Margin="10" Name="lvDataBinding" >
<GridView>
<GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Header="Age" Width="50" DisplayMemberBinding="{Binding Age}" />
<GridViewColumn Header="Mail" Width="150" DisplayMemberBinding="{Binding Mail}" />
</GridView>
</ListView>
</Grid>
< Setter 属性 = “ IsSelected”值 = “{ Binding IsSelected,Mode = TwoWay }”/>

接下来的事情解决了

<Grid>
<ListView Margin="10" Name="lvDataBinding" >
<ListView.View> <!-- This was missing in top! -->
<GridView>
<GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Header="Age" Width="50" DisplayMemberBinding="{Binding Age}" />
<GridViewColumn Header="Mail" Width="150" DisplayMemberBinding="{Binding Mail}" />
</GridView>
</ListView.View>
</ListView>
</Grid>
< TreeView. ItemTemplate >

我也犯了同样的错误。
< 层次化数据模板 ItemsSource = “{ Binding SubItemListList }”> 在我的情况下,我只是删除了一个单行 <UniformGrid Columns="3" />

<ListBox>
<UniformGrid Columns="3" /> // remove this line!!!!
...
</ListBox>
...

出现这种错误的可能原因有很多。在我的例子中,我在‘ column’标记之外添加了一个 datagrid 列。像以图像显示的那样。令人惊讶的是,XAML 编辑器没有给出任何错误。 misplaced xaml