C#/WPF: Привязка Поля комбинированного списка ItemSource в Datagrid к элементу за пределами DataContext

Хорошо.. не уверенный, но я ищу что-то подобное, и я нашел:

Nitobi

, Не уверенный, если это делает точно, что Вы хотите, хотя youcan определенно перемещаются с клавишами управления курсором, и, редактируют встроенный....

РЕДАКТИРОВАНИЕ Также Существенные Объекты имеют хорошего редактора, также... кажется в точности как Excel... http://demo.essentialobjects.com/Default.aspx? path=Grid_i1_i20

13
задан Joseph jun. Melettukunnel 30 September 2009 в 09:49
поделиться

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" />
        </DataTemplate>
    </my:DataGridTemplateColumn.CellTemplate>
</my:DataGridTemplateColumn>

Надеюсь, это поможет и кому-то другому.

Ура

24
ответ дан 1 December 2019 в 21:53
поделиться

Если RowEntries является настраиваемым классом, просто дайте ему ссылку на 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);
0
ответ дан 1 December 2019 в 21:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: