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對象包裹在模型對象中...有沒有辦法做到這一點?我有沒有正確實施?
感謝您指出contentTemplate - 這就是我所缺少的。 – serachley 2012-07-12 00:19:11