Использование представления в качестве шаблона данных - PullRequest
0 голосов
/ 19 октября 2010

Я использую структуру MVVM для нашего приложения. Я добавил представление в качестве шаблона данных в сетку (Developer Express DXGrid).

<DataTemplate x:Key="cardTemplate">
     <ui:MediaEnquiryParticipantView x:Name="mediaEnquiryParticipantView"/>
</DataTemplate>

Теперь моя проблема в том, что я хочу, чтобы этот View (MediaEnquiryParticipantView) представлял 1 строку таблицы.

Как мне подойти к моей проблеме?


<dxg:GridControl Name="grdParticipants"
                     Grid.Row="0"
                     Height="Auto" Width="Auto"
                     MaxHeight="5000"
                     VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
                     AutoPopulateColumns="True"
                     DataSource="{Binding Path=MediaEnquiryParticipantList,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                     MouseDoubleClick="grdParticipants_MouseDoubleClick">
            <dxg:GridControl.Resources>
                <DataTemplate x:Key="headerTemplateFullName">
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Path=Data.caUser.UserName}" />
                    </StackPanel>
                </DataTemplate>
                <DataTemplate x:Key="cardTemplate">
                    <ui:MediaEnquiryParticipantView x:Name="mediaEnquiryParticipantView" MediaEnquiryID="{Binding Path=Data.MediaEnquiryID}"/>
                </DataTemplate>
            </dxg:GridControl.Resources>
            <dxg:GridControl.Columns>
                <dxg:GridColumn FieldName="UserName" Width="150" AllowColumnFiltering="False"/>
                <dxg:GridColumn FieldName="CanResolve" Width="150" AllowColumnFiltering="False"/>
            </dxg:GridControl.Columns>
            <dxg:GridControl.View>
                <dxg:CardView x:Name="cardView"                                  
                              CardHeaderTemplate="{DynamicResource headerTemplateFullName}"
                              CardTemplate="{DynamicResource cardTemplate}">
                    <dxg:CardView.RowCellMenuCustomizations>
                        <dxb:BarButtonItemLink BarItemName="btnDelete" />
                    </dxg:CardView.RowCellMenuCustomizations>
                </dxg:CardView>
            </dxg:GridControl.View>
        </dxg:GridControl>

Сетка выше отображает «MediaEnquiryParticipantView» в форме просмотра карты. Сетка в части «MediaEnquiryParticipantsView» У меня есть отдельные модели представления для каждого.

Мой код для MediaEnquiryParticipantViewModel:

public class MediaEnquiryParticipantViewModel : ViewModelBase
{
    #region Fields

    private IQueryable<caUser> userList;

    #endregion Fields

    #region Constructors

    public MediaEnquiryParticipantViewModel(SessionContext sessionContext, NavigationItem navigationItem, MediaEnquiryViewModel mediaEnquiryViewModel, Mediator mediator)
        : base(mediator)
    {
        SessionContext = sessionContext;
        NavigationItem = navigationItem;
    }

    #endregion Constructors

    #region Properties

    public IQueryable<caUser> UserList
    {
        get
        {
            if (userList == null)
            {
                userList = GetUserList();
            }
            return userList;
        }
        set
        {
            userList = value;
            OnPropertyChanged("UserList");
        }
    }

    #endregion Properties

    #region Methods

    private IQueryable<caUser> GetUserList()
    {
        IQueryable<caUser> list = (from u in ((Chase_Media_Pro_Entity_Model)this.NavigationItem.ObjectContext).caUser
                                   select u);

        return list;
    }

    #endregion Methods
}

UserList предназначен для поля со списком в MediaEnquiryParticipantView.

1 Ответ

0 голосов
/ 19 октября 2010

, если указать тип данных для строки, с которой он должен работать.

<DataTemplate DataType="{x:Type YourRowObjectTypeGoesHere}">
    <ui:MediaEnquiryParticipantView />
</DataTemplate>

с этим шаблоном DataTemplate все объекты строк будут отображаться как MediaEnquiryParticipantView.

edit:

<ListBox ItemSource={Binding YourViewModelListTable}>

</ListBox>

, если ваш YourViewModelListTable просто содержит ваши шаблонные строки.они будут показаны в списке как пользовательский интерфейс: MediaEnquiryParticipantView для каждой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...