2016-07-06 97 views
-1

我的理论代码:在一个ItemsControl绑定属性的项目从一个集合

ScriptContainerUserControl.xaml

<ItemsControl x:Name="ScriptItemsControl"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
      <TextBox x:Name="pTB" Text="{Binding PhasePriority}" /> 
      <TextBox x:Name="nTB" Text="{Binding Name}" /> 
      <TextBox x:Name="dTB" Text="{Binding Description}" /> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

ScriptContainerUserControl.xaml.cs

public ScriptContainerUserControl() : base() 
{ 
    InitializeComponent(); 
    ScriptItemsControl.ItemsSource = PScriptCollection; 
} 

//PScriptCollecion is of type SynchronizedObservableCollection<ProcessScript> 
//ProcessScript has the elements PhasePriority, Name, and Description 

将在上面的代码确保工作

ScriptItemsControl[i].dTB.Text = PScriptCollection[i].Description? 

还是不可能像这样绑定?

+0

你甚至没有尝试过吗?提示:描述必须是PScriptCollection的元素类中的公共属性。 – Clemens

+0

我正在尝试解决问题,并阻止我测试我的理论。每个元素都是公共属性。 –

+0

然后它应该工作。除此之外,您可以随时编写一个小测试程序,与您在此显示的内容完全相同。需要你五分钟。 – Clemens

回答

1

芬斯特,

这绝对应该工作,只要你有所有在ProcessScript类的三个属性来实现的getter setter属性。

当您使用数据模板时 - 这意味着您将itemscontrol的每个元素的datacontext设置为您的集合的一个元素。

所以这里每个Itemcontrol元素都将查看ProcessScript对象,并且如果该对象具有所有三个属性,则应该会看到数据。

0

这样做是不可能的。您实际上不设置绑定...为了支持观察对集合的更改,您应该将集合绑定到ItemsControl的ItemsSource属性。 代替线:

ScriptItemsControl.ItemsSource = PScriptCollection; 

试试这个

ScriptItemsControl.ItemsSource = new Binding("PScriptCollection"); 
+0

不正确。虽然绑定ItemsSource属性很常见,但并不是绝对必要的。你也可以做一个普通的任务。 – Clemens

+0

然后我试图将Collection的项目绑定到ItemsControl的项目的想法应该工作? –

相关问题