2012-07-11 54 views
0

我有一個wpf應用程序顯示用戶列表。點擊用戶將顯示該用戶的詳細信息 - 很像WaF書庫示例等。ContentControl DataTemplate使用接口

我已經完成了一些關於綁定到接口的閱讀,並且我可以成功地將ListView綁定到我的接口,但對ContentControl使用相同的方法不起作用。

這裏就是我的了:

域模型 - USER(EF實體)

partial class USER : IUser 
    { 
    } 



public interface IUser 
    { 
     String USERNAME { get; set; } 
     String FIRST_NAME { get; set; } 
     String SURNAME {get;set;} 
     String EMAIL { get; set; } 
    } 

表示層

public class UserMainContentModel 
    { 
      public ICollectionView Users { get; private set; } 
      public IUser SelectedUser { get; private set; } 
      //... 
      private void SelectedUserChanged(object sender, EventArgs e) 
      { 
      SelectedUser = Users.CurrentItem as IUser; 
      NotifyPropertyChanged("SelectedUser"); 
      } 
    } 

視圖XAML

<UserControl x:Class="CQMS.Module.Users.Views.MainContent.UsersMainContentView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:models="clr-namespace:CQMS.Module.Users.ViewModels" 
      xmlns:interface="clr-namespace:CQMS.Framework.Model;assembly=CQMS.Framework"    
      mc:Ignorable="d" > 
    <UserControl.Resources> 
     <DataTemplate DataType="{x:Type interface:IUser}"> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="*"/> 
        <RowDefinition Height="*"/> 
        <RowDefinition Height="*"/> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition/> 
        <ColumnDefinition/> 
        <ColumnDefinition/> 
       </Grid.ColumnDefinitions> 
       <Label AutomationProperties.AutomationId="UsernameLabel" Grid.Row="0" Grid.Column="0" Margin="0,0,0,10">Username</Label> 
       <Label AutomationProperties.AutomationId="NameLabel" Grid.Row="0" Grid.Column="1">Name</Label> 
       <Label AutomationProperties.AutomationId="EmailLabel" Grid.Row="0" Grid.Column="2">Email</Label> 
       <TextBox AutomationProperties.AutomationId="UsernameTextBox" Grid.Row="1" Grid.Column="0" Text="{Binding interface:IUser.USERNAME}" /> 
       <TextBox AutomationProperties.AutomationId="NameTextBox" Grid.Row="1" Grid.Column="1" Text="{Binding interface:IUser.FIRST_NAME}" /> 
       <TextBox AutomationProperties.AutomationId="EmailTextBox" Grid.Row="1" Grid.Column="2" Text="{Binding interface:IUser.EMAIL}" /> 
      </Grid> 
     </DataTemplate> 
    </UserControl.Resources> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height=".4*"/> 
      <RowDefinition Height=".6*"/> 
     </Grid.RowDefinitions> 
     <ListView Grid.Row="0" AutomationProperties.AutomationId="UserListView" ItemsSource="{Binding Users}" SelectionMode="Single" Width="Auto" Height="Auto" > 
      <ListView.ItemTemplate> 
       <DataTemplate DataType="{x:Type interface:IUser}"/> 
      </ListView.ItemTemplate> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="Username" Width="80" 
         DisplayMemberBinding="{Binding Path=USERNAME}"/> 
        <GridViewColumn Header="First Name" Width="80" 
         DisplayMemberBinding="{Binding Path=FIRST_NAME}"/> 
        <GridViewColumn Header="Email" Width="80" 
         DisplayMemberBinding="{Binding Path=EMAIL}"/> 
       </GridView> 
      </ListView.View> 
     </ListView> 
     <Border Grid.Row="1" CornerRadius="4,4,4,4" BorderBrush="#193441" Background="#FCFFF5" BorderThickness="2,2,2,2" Margin="5" Padding="5"> 
      <ContentControl Content="{Binding SelectedUser}" Width="Auto" Height="Auto"/> 
     </Border> 
    </Grid> 
</UserControl> 

當我選擇一個用戶來回在列表中,我想要的是將所選用戶的詳細信息顯示在內容控件中,但是,我得到的是在此控件中顯示的具體類的名稱。我不想將我的具體類暴露給我的觀點,我真的不想將我的IUser對象包裹在模型對象中...有沒有辦法做到這一點?我有沒有正確實施?

回答

0

您確定DataTemplates可以隱式應用於接口而不是類嗎?無論哪種方式,在這種情況下,給模板一個密鑰並在ContentControl.ContentTemplate中引用它並不會有什麼壞處。

另外我從來沒有見過像這樣的綁定,不應該只是USERNAME而不是interface:IUser.USERNAME

+0

感謝您指出contentTemplate - 這就是我所缺少的。 – serachley 2012-07-12 00:19:11

相關問題