我懷疑我的問題的答案很簡單,但我在論壇上看了一眼,似乎找不到任何相同內容。ItemsControl只顯示第一項
我有一個相當複雜的綁定結構,在最遠端有一個ItemsControl,但它只顯示第一個項目。我可以看到代碼方面的數據是正確的,並且只保存8個項目,第一個項目正確顯示,並具有所需的所有標籤和顏色。
邏輯端結構是這樣的:
- 主窗口偏類
- WaterSamplerClass的的ObservableCollection
- ParametersClass(一類的單個實例)bottleStateClass
- 的
- 的ObservableCollection int Number(屬性)
- 字符串標籤(屬性)
- 的
- ParametersClass(一類的單個實例)bottleStateClass
- WaterSamplerClass的的ObservableCollection
的XAML結構是這樣的:
- 主窗口偏類
- ControlTe mplate分組框中使用bottleState控制模板包含按鈕
- DataTemplate中(從代碼設置列表的DataContext WaterSampler實例)
- 的ItemsControl使用的DataTemplate來顯示大量bottleStates的使用
- 包含按鈕的裝飾的ControlTemplate ItemsControl中的
- ControlTe mplate分組框中使用bottleState控制模板包含按鈕
下面的代碼的簡化版本:
其中datacontext是WaterSampler實例的GroupBox ControlTemplate中的Items控件及其數據模板。
<ControlTemplate x:Key="WaterSamplerGroupBoxTemplate" TargetType="{x:Type GroupBox}" >
<GroupBox Header="{Binding Path=Header}" Width="300" Margin="10,5,10,0" HorizontalAlignment="Center">
<StackPanel Orientation="Horizontal">
<StackPanel.Resources>
<DataTemplate x:Key="BottleStateDataTemplate">
<Button Template="{DynamicResource ValveStatusTemplate}" />
</DataTemplate>
</StackPanel.Resources>
<ItemsControl Name="bottleStateListBox" ItemTemplate="{StaticResource BottleStateDataTemplate}" Margin="5" Height="50" ItemsSource="{Binding BottleIsFullList}" DataContext="{Binding Parameters}"/>
</StackPanel>
</GroupBox>
</ControlTemplate>
簡化按鈕控制模板:
<ControlTemplate x:Key="ValveStatusTemplate" TargetType="{x:Type Button}" >
<StackPanel Orientation="Vertical" Width="30" Margin="5" >
<TextBlock Text="{Binding Number}" FontSize="18" Canvas.Left="8"/>
</StackPanel>
</ControlTemplate>
保持該項目模板數據的類:
public class DisplayBottleStateClass : INotifyPropertyChanged
{
private int number;
public int Number
{
get { return number; }
}
}
含有DisplayBottleClass的列表中的類:
public class WSParametersClass : INotifyPropertyChanged
{
private List<DisplayBottleStateClass> bottleIsFullList = new List<DisplayBottleStateClass>();
public List<DisplayBottleStateClass> BottleIsFullList
{
get { return bottleIsFullList; }
}
}
含參數類的類:
public class WaterSampler : INotifyPropertyChanged
{
private WSParametersClass parameters = new WSParametersClass();
public WSParametersClass Parameters
{
get { return parameters; }
set { parameters = value; OnPropertyChanged("Parameters"); }
}
}
最後MainWindow類:
public partial class MainWindow : Window
{
public class WaterSamplerListClass : ObservableCollection<WaterSampler> { }
private WaterSamplerListClass waterSamplers = new WaterSamplerListClass();
public MainWindow()
{
waterSamplers.Add(new WaterSampler(0));
WaterSampler0Group.DataContext = (waterSamplers[0]);
}
}
我得到兩個刷子,我使用,但有約束力的錯誤,當我在XAML固定值替換這些仍然只顯示第一個元素。該列表似乎也可以通過綁定正確更新,因爲我可以看到正確更改的第一個元素。我得到的錯誤是:
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=GradientStopHighlight; DataItem=null; target element is 'GradientStop' (HashCode=23577486); target property is 'Color' (type 'Color')
任何建議將是非常受歡迎的。
非常感謝
埃德
這是一個很大的運動部件,並且您未示出在路徑和元素錯誤。如果你簡化問題,你可能會有更多的運氣來獲得答案。將代碼和xaml刪除到最低限度。 – 2011-06-14 18:26:51
這是我現在面臨的問題中最接近的問題。我徘徊你解決了嗎?我沒有任何綁定錯誤,但仍然只有嵌套列表中的第一個元素顯示在視圖中。謝謝。 – ljubomir 2012-12-27 12:35:13