2015-04-24 119 views
0

我正在WPF中制作一个AddressBook程序,我想从具有联系人信息的文本文件中绑定我的DataGridColumn
但是,我不知道该怎么办呢使用Caliburn.Micro将文本文件信息绑定到DataGrid

这里是我的视图模型(ContactsViewModel.cs):

using Caliburn.Micro; 
using System.Windows; 

namespace AddressBook { 
public class ContactsViewModel : Screen { 
    //What to do here ? 
} 
} 

这里的XAML代码(ContactsView.xaml):

<UserControl x:Class="AddressBook.ContactsView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

    <DataGrid FontSize="16" CanUserResizeColumns="False" SelectedIndex="1"> 
     <DataGrid.Columns> 
      <DataGridTextColumn FontSize="14" Header="Name" Width="150"/> 
      <DataGridTextColumn FontSize="14" Header="Mobile No." Width="170"/> 
      <DataGridTextColumn FontSize="14" Header="Email" Width="200"/> 
      <DataGridTextColumn FontSize="14" Header="Address" Width="240"/> 
     </DataGrid.Columns> 
    </DataGrid> 

</UserControl> 

这是我的文本文件(Contacts.txt):

Humayun 032121352643 [email protected] A-312 korangi karachi, 
Jahangir 03212515332 [email protected] A-584 korangi karachi 
pakistan, 
+0

请帮我... –

回答

0

您需要属性ViewModel中的集合并为控件名称属性赋予相同的名称。请参阅下面的代码。

<DataGrid FontSize="16" x:Name="List" AutoGenerateColumns="False" CanUserResizeColumns="False" SelectedIndex="1"> 
     <DataGrid.Columns> 
      <DataGridTextColumn FontSize="14" Header="Name" Width="150" Binding="{Binding Name}"/> 
      <DataGridTextColumn FontSize="14" Header="Mobile No." Width="170" Binding="{Binding MobileNo}"/> 
      <DataGridTextColumn FontSize="14" Header="Email" Width="200" Binding="{Binding Email}"/> 
      <DataGridTextColumn FontSize="14" Header="Address" Width="240" Binding="{Binding Address}"/> 
     </DataGrid.Columns> 
    </DataGrid> 

public class ContactsViewModel : Screen 
{ 
    public ContactsViewModel() 
    { 
     string str = File.ReadAllText("Contacts.txt"); 
     string[] strContracts = str.Split(','); 
     foreach (var item in strContracts) 
     { 
      string[] fields = item.Trim().Split(' '); 
      _list.Add(new Contact() { Name = fields[0],MobileNo= fields[1],Email=fields[2],Address=fields[3] }); 
     } 
    } 
    private IObservableCollection<Contact> _list = new BindableCollection<Contact>(); 
    public IObservableCollection<Contact> List 
    { 
     get { return _list; } 
     set 
     { 
      _list = value; 
      NotifyOfPropertyChange(() => List); 
     } 
    } 
} 

public class Contact 
{ 
    private string name; 

    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    private string address; 

    public string Address 
    { 
     get { return address; } 
     set { address = value; } 
    } 

    private string email; 

    public string Email 
    { 
     get { return email; } 
     set { email = value; } 
    } 

    private string mobileNo; 

    public string MobileNo 
    { 
     get { return mobileNo; } 
     set { mobileNo = value; } 
    } 


} 

在此示例中,List是集合的属性名称以及Datagrid的名称。在视图模型的构造函数中有文件数据的解析逻辑,并将其作为一个集合对象。