【发布时间】:2011-06-24 09:26:12
【问题描述】:
是否可以实现以下 WPF (Silverlight) 数据绑定方案?
一个页面上有许多CustomControls:
<Grid x:Name="grid1">
...
<My:CustCntr x:Name="name1" Property1="{Binding Property1}" />
<My:CustCntr x:Name="name2" Property1="{Binding Property1}" />
<My:CustCntr x:Name="name3" Property1="{Binding Property1}" />
...
</Grid>
Grid 的 DataContext 是一个 ObservableCollection:
grid1.DataContext = myCollection;
...
ObservableCollection<MyEntity> myCollection= new ObservableCollection<MyEntity>();
...
MyEntity 类具有属性Name 和Property1。
MyEntity me1 = new MyEntity { Name = "name1", Property1 = "5" };
MyEntity me2 = new MyEntity { Name = "name2", Property1 = "6" };
MyEntity me3 = new MyEntity { Name = "name3", Property1 = "7" };
...
myCollection.Add(me1);
myCollection.Add(me2);
myCollection.Add(me3);
...
我能否将每个 CustomControl 中的 Property1 数据绑定到 myCollection 的相应项,其中 CustomControl 的 Name 等于集合项的 Name 字段的值?
【问题讨论】:
-
我对 ItemsControl 有所了解,但我需要更多信息: 1. 如何使用 x:Name 属性? 2. Grid控件是必须的还是可以用StackPanel代替?
-
@vorrtex 1. CustomControls 的 x:Name 属性用于在代码中识别和处理它们。 2. 我明白你的意思。不,布局可能比仅使用这样的 Grid 复杂得多。所以,用 StackPanel 代替它是不可能的。
-
是否需要 Xaml 绑定或者后面的代码可以吗?因为我在 Xaml 中看不到任何这样做的方法
-
@Meleak 我现在正在代码中更新它们,使用
FrameworkElement.FindName(string name)构造。只是想以更 WPF 的方式对其进行优化。所以,如果它是一种数据绑定方式,那么我认为它可以在代码中。 -
所以页面上的控件数量是恒定的,对吧?因为否则使用 Name 属性是没有意义的。在这种情况下,我可以使用 linq 在代码隐藏中设置绑定。
标签: c# wpf silverlight data-binding observablecollection