Привязать ListView ItemSource к двум различным свойствам GetSet в представлении (MVVM) - PullRequest
0 голосов
/ 07 января 2011

На мой взгляд, который является UserControl У меня есть ListView, который имеет несколько GridViewColumns, и мне было интересно, можно ли связать first GridViewColumns с ImageTypesПолучить / установить свойство в моем ViewModel и двух других столбцах для другого свойства WorkflowData GetSet в ViewModel?

Причина в том, что мой первый столбец будет получен из списка изображений, а другие столбцы - из данных.хранится в моей базе данных.

В настоящее время я не могу найти правильные привязки для отображения значков в списке вместе с другими данными, поступающими из модели (через ViewModel).Нужно ли мне устанавливать «RelativeSource» в привязке для изображения?

Из моего примера вы увидите, что я пока просто пытаюсь показать одно изображение, передавая uri в виде строки.

Любая помощь будет оценена.Спасибо

XAML Просмотреть фрагмент

<UserControl x:Class="Project.View.WorkflowStatus"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mvvmtk="clr-namespace:MVVMToolkit"
    Height="Auto"        
    xmlns:local="clr-namespace:Project.ViewModel">   
<UserControl.DataContext>
    <local:WorkflowStatusViewModel />
</UserControl.DataContext>
<ListView Grid.Column="0" Grid.Row="1" 
    ItemsSource="{Binding Path=WorkflowData.WFTasks, Mode=TwoWay}"
            SelectedValue="{Binding Workflow.WFTask}"
            HorizontalContentAlignment="Stretch">
    <ListView.View>
        <GridView>
                <GridViewColumn Header="" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid.RowDefinitions>
                                    <RowDefinition />
                                </Grid.RowDefinitions>
                                <Image Source="{Binding ImageTypes, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type local:WorkflowStatusViewModel}}}"
                                        Stretch="None"></Image>
                            </Grid>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Field1"
                                Width="50"
                                DisplayMemberBinding="{Binding Path=Field1Value1}"></GridViewColumn>
                <GridViewColumn Header="Field2"
                                Width="50"
                                DisplayMemberBinding="{Binding Path=Field1Value2}"></GridViewColumn>
        </GridView>
    </ListView.View>            
</ListView>
</UserControl>

Просмотреть фрагмент модели

/// <summary>
// This is the main class which links the Model and View together.
/// </summary>
public class WorkflowStatusViewModel
{


    /// <summary>
    // Create a public instance of the workflow Model
    /// </summary>
    public WorkflowModel WorkflowData { get; set; }


    /// <summary>
    /// Class Constructor
    /// </summary>
    public WorkflowStatusViewModel()
    {
        InitialiseData();
    }


    ///MatterManagerView;component/Assets/Task.png
    private string _ImageTypes;
    public string ImageTypes
    {
        get { return "Project;component/Assets/Task.png"; }
        set { _ImageTypes = value; }
    }

    /// <summary>
    // Private function that create all the neccessary objects
    /// </summary>
    private void InitialiseData()
    {

        try
        {
            // Create a new instance of the Workflow Model
            WorkflowData = new WorkflowModel();

        }

        // Write Errors captured to Aderant Logging object
        catch (Exception ex)
        {


        }

    }

РЕДАКТИРОВАТЬ: Основано на предложении Марселя япопытался сопоставить изображение с использованием RelativeSource

1 Ответ

1 голос
/ 07 января 2011

Да, это можно сделать через RelativeSource

Текст списка listview указывает на WorkflowData.WFTasks, но я ожидаю, что сама модель представления привязана к странице, на которой размещен просмотр списка. В противном случае вы должны изменить AncestorType

После создания тестового проекта столбец изображения для вас будет привязан:

Source="{Binding Path=DataContext.ImageTypes, 
         RelativeSource={RelativeSource FindAncestor, 
         AncestorType={x:Type UserControl}}}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...