C # / WPF: привязка Combobox ItemSource в Datagrid к элементу вне DataContext

Я хотел бы сделать следующее:

public List PreLoadedUserList { get; set; }
public List SomeDataRowList { get; set; }

public class Users
{
    public int Age { get; set; }
    public string Name { get; set; }
}
public class SomeDataRowList 
{
    public int UserAge { get; set;
}

Теперь моя (WPF Toolkit) DataGrid выглядит так:


    


Теперь моя проблема в том, что PreLoadedUserList находится за пределами ItemSource (SomeDataRowList), и я нене знаю, как связать что-то вне этого. Что я на самом деле хочу: - Отображать в ComboBox PreLoadedUserList - Установить значение (RowEntries) SelectedItem.UserAge в качестве значения выбранного ComboboxItem.Age

Дайте мне знать, если мое объяснение слишком странное :-)

Спасибо, ура

Ответы на вопрос(2)

Решение Вопроса

<my:datagridtemplatecolumn header="SomeHeader">
    <my:datagridtemplatecolumn.celltemplate>
        <datatemplate>
            <combobox selectedvaluepath="UserAge" selectedvalue="{Binding Age}" displaymemberpath="Name" itemssource="{Binding Path=DataContext.PreLoadedUserList, 
                    RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" isreadonly="True" background="White">
        </combobox></datatemplate>
    </my:datagridtemplatecolumn.celltemplate>
</my:datagridtemplatecolumn>

Надеюсь, что это может помочь кому-то еще.

ура

 Alfero Chingono31 дек. 2010 г., 21:59
Это мне очень помогло ... Спасибо!
 Tvd30 авг. 2013 г., 11:18
Это помогло мне решить мой вопрос, Джозеф. Обработка этих заголовковs было моей следующей задачей. Ваше решение мне очень помогло и сэкономило мне много времени. Большое спасибо.
 Philippe Lavoie15 февр. 2011 г., 17:43
Вау, я пытался и пытался сDataGridComboBoxColumn» и ничего .. Но тогда ВОЛШЕБНОЕ! Ваш прекрасный пример работает (с шаблоном) Спасибо!

просто дайте ему ссылку на PreLoadedUserList. Затем каждый экземпляр имеет указатель на него, и вы можете использовать его в привязке.

Просто предположим, что имена классов, такие как Users и RowEntries, предполагают, что они являются коллекциями, но ваше использование выглядит так, как будто онитовар, а не коллекция. Я'буду использовать уникальные имена, чтобы избежать путаницы. Я'сделал бы что-то подобное

public List<user> PreLoadedUserList { get; set; }
public List<rowentry> SomeDataRowList { get; set; }

public class User
{
    public int Age { get; set; }
    public string Name { get; set; }
}
public class RowEntry 
{
    public int UserAge { get; set; }
    public List<user> PreLoadedUserList { get; set; }
}

// at the point where both PreLoadedUserList is instantiated
// and SomeDataRowList is populated
SomeDataRowList.ForEach(row => row.PreLoadedUserList = PreLoadedUserList);
</user></rowentry></user>

Ваш ответ на вопрос