Itemscontrol,Databinding和ItemTemplate

时间:2014-05-22 08:00:01

标签: c# wpf data-binding controltemplate itemscontrol

尝试进行以下操作:

在我的XAML中我有

<ItemsControl x:Name="IC_Contacts" BorderThickness="0" >
   <ItemsControl.ItemTemplate>
      <DataTemplate>
         <Grid>
            <Grid.ColumnDefinitions>
               <ColumnDefinition Width="*" />
               <ColumnDefinition Width="20" />
               <ColumnDefinition Width="20" />
            </Grid.ColumnDefinitions>
            <Expander Grid.Column="0">  
            </Expander>
            <Button Grid.Column="1" Height="10" Width="20"  Content="Edit"/>
            <Button Grid.Column="2" Height="10" Width="20" Content="Delete"/>
         </Grid>
      </DataTemplate>
   </ItemsControl.ItemTemplate>
</ItemsControl>

在代码背后

public void SetBinding()
    {

        contactsExp = new List<Expander>();
        foreach (var contact in contacts)
        {
            Expander exp = new Expander();
            exp.Template = (ControlTemplate)Application.Current.FindResource("ContactExpander");

            if (!String.IsNullOrEmpty(contact.ImageName))
                exp.SetValue(ExpanderImage.ExpImgProperty, "/Images/" + contact.ImageName);
            else
                exp.SetValue(ExpanderImage.ExpImgProperty, "/Images/default.jpg");
            exp.Header = contact.Name;

            exp.Content = string.Format("Mobile: {0}\nPhone: {1}\nAdress: {2}\nDate of Birth: {3}",
                contact.Mobile, contact.Phone, contact.Address, contact.DateOfBirth.ToString("dd.mm.yyyy"));

            contactsExp.Add(exp);
        }
        IC_Contacts.ItemsSource = contactsExp;
    }

我想做一些接近联系人的书,所以我的扩展器有 自定义模板和每个扩展器对象是一个联系人。但 我需要为每个扩展器添加按钮Delete和Edit。 如果我在模板中添加它们,我将无法在MainWindows处理事件 范围,仅在申请时。当我尝试使用ItemsControl.ItemTemplate时 似乎没有任何改变。 需要一些帮助......我哪里错了?

由于

现在尝试在xaml中进行绑定:

<ItemsControl x:Name="IC_Contacts" BorderThickness="0" 
                          ItemsSource="{Binding Source=contacts}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="300" />
                                <ColumnDefinition Width="10" />
                                <ColumnDefinition Width="10" />
                            </Grid.ColumnDefinitions>

                            <!--<Expander x:Name="myExp" Grid.Column="0" Template="{StaticResource ContactExpander}"
                                      Header="{Binding Path=Name}"
                                      my:ExpanderImage.ExpImg="{Binding Path=ImageName}"/>-->
                            <TextBox Text="{Binding Name}"/>

                            <Button Grid.Column="1" Height="20" Width="10"  Content="Edit"></Button>
                            <Button Grid.Column="2" Height="20" Width="10" Content="Delete"></Button>
                        </Grid>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
</ItemsControl>

我在mainwindow构造函数中填充联系人:

public MainWindow()
    {
        InitializeComponent();           
        ContactsManager cm = new XMLContactsManager();
        DataContext = this;
        contacts = cm.LoadContacts().OrderBy(c => c.Name).ToList();                        
    }

启动应用程序时,似乎itemscontrol绑定到我的联系人,但

 <TextBox Text="{Binding Name}"/>

不指定联系人属性。 这是我的联系班:

[Serializable]
public class PersonalContact
{
    public string Name { get; set; }
    public int Mobile { get; set; }
    public int Phone { get; set; }
    public DateTime DateOfBirth { get; set; }
    public string Address { get; set; }
    public string ImageName { get; set; }

    public PersonalContact()
    {

    }
}

0 个答案:

没有答案