绑定我有一个WPF UI绑定到的AwesomeClass绑定在使用模板(WPF)
集合现在,AwesomeClass有AwesomeParts对象的集合。
如何我可以让我的用户界面在这样的方式(作为一个例子)
每个AwesomeClass例如,有一个标签一个标签面板 ,然后在每个真棒部分上,对一个对象一个列表框,在该选项卡上。
基本上:Awesomes->标签
并且然后:Awesome.Awesomeparts-> Tabs.Listbox
绑定我有一个WPF UI绑定到的AwesomeClass绑定在使用模板(WPF)
集合现在,AwesomeClass有AwesomeParts对象的集合。
如何我可以让我的用户界面在这样的方式(作为一个例子)
每个AwesomeClass例如,有一个标签一个标签面板 ,然后在每个真棒部分上,对一个对象一个列表框,在该选项卡上。
基本上:Awesomes->标签
并且然后:Awesome.Awesomeparts-> Tabs.Listbox
以下是代码做你在找什么:
public partial class TabWindow : Window
{
public TabWindow()
{
InitializeComponent();
List<AwesomeClass> items = new List<AwesomeClass>();
for (int i = 0; i < 10; i++)
{
items.Add(new AwesomeClass());
}
AwesomeTabs.ItemsSource = items;
Loaded += new RoutedEventHandler(TabWindow_Loaded);
}
// Method 1
void TabWindow_Loaded(object sender, RoutedEventArgs e)
{
FindListBox(AwesomeTabs);
}
private void FindListBox(DependencyObject obj)
{
Int32 count = VisualTreeHelper.GetChildrenCount(obj);
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(obj, i);
if (child is ListBox)
{
(child as ListBox).SelectionChanged += new SelectionChangedEventHandler(ListBox_SelectionChanged);
}
else
{
FindListBox(child);
}
}
}
// Method 2
private void ListBox_Loaded(object sender, RoutedEventArgs e)
{
(sender as ListBox).SelectionChanged += new SelectionChangedEventHandler(ListBox_SelectionChanged);
}
void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
try
{
MessageBox.Show(e.AddedItems[0].ToString());
}
catch (Exception)
{ }
}
}
class AwesomeClass
{
static Int32 count = 0;
public Int32 Index { get; set; }
public List<AwesomePart> Parts { get; protected set; }
// Method 3 : Preferred
private AwesomePart _selectedPart;
public AwesomePart SelectedPart
{
get { return _selectedPart; }
set
{
OnSelectionChanged(_selectedPart, value);
_selectedPart = value;
}
}
private void OnSelectionChanged(AwesomePart oldValue, AwesomePart newValue)
{
if (newValue != null) MessageBox.Show(newValue.ToString());
}
public AwesomeClass()
{
Index = ++count;
Parts = new List<AwesomePart>();
for (int i = 0; i < 10; i++)
{
Parts.Add(new AwesomePart());
}
}
public override string ToString()
{
return "Tab #" + Index.ToString();
}
}
class AwesomePart
{
static Int32 count = 0;
public Int32 Index { get; set; }
public AwesomePart()
{
Index = ++count;
}
public override string ToString()
{
return "Part #" + Index.ToString();
}
}
XAML:
<Grid>
<TabControl Name="AwesomeTabs">
<TabControl.ContentTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding Parts}" SelectedItem="{Binding SelectedPart}" Loaded="ListBox_Loaded"></ListBox>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</Grid>
绑定列表<AwesomeClass>到带标题内容的控制。每个“AwesomeClass”对象将设置为headered内容控件中每个“选项卡”的datacontext。
在每个“选项卡”上的内容控件中,将访问列表<AwesomePart>的DataContext(AwesomeClass)属性绑定到您的Listbox控件。
有意义吗?
干杯。
唯一的一点是,如果我想打电话列表框的选择值的函数,我将如何参考它? – akshaykarthik 2010-06-14 20:24:41
@AKRamkumar:将AwesomeClass中的属性绑定到Listbox的SelectedItem属性。从该属性的setter调用该函数。 – Amsakanna 2010-06-15 07:58:47
更新了代码! – decyclone 2010-06-15 09:22:09