Есть ли ключевое слово для прямой привязки к DataContext, а не к его атрибуту?
Я слышал об обходном пути с Self Object. Моя проблема в том, что я открываю окно и передаю ObservableCollection в качестве аргумента, для которого установлен DataContext.
Здесь ctor WPF (xaml.cs)
public Depot(ObservableCollection<ObservableCollection<ItemManager.Item>> totalDepot)
{
this.FullDepotList = totalDepot;
this.DataContext = FullDepotList[1];
InitializeComponent();
}
Фрагмент кода XAML, в котором я бы предпочел привязаться к DataContext напрямую или к «this»:
<WrapPanel>
<ListBox
ItemsSource = "{Binding this, UpdateSourceTrigger=PropertyChanged}"
ItemTemplate = "{DynamicResource ItemWithCoolTooltipTemplate}"
Focusable = "False">
</ListBox>
</WrapPanel>





Вы можете попробовать следующий трюк.
Добавьте свойство name в ваше окно - <Window ... Name = "myWindow" ...>
Используйте такую конструкцию для привязки к собственности или тому, что вам нужно - <ListBox ItemsSource = "{Binding Path=DataContext, ElementName=myWindow}" ... />
Чтобы выполнить привязку непосредственно к DataContext, а не к его атрибуту, не пишите путь привязки. Сделайте просто {Binding}. UpdateSourceTrigger=PropertyChanged не нужен, потому что ItemsSource не меняется из вида.
<ListBox
ItemsSource = "{Binding}"
ItemTemplate = "{DynamicResource ItemWithCoolTooltipTemplate}"
Focusable = "False">
</ListBox>
в качестве альтернативы используйте Path=. для кодирования требования "привязать сюда весь DataContext"
<ListBox
ItemsSource = "{Binding Path=.}"
ItemTemplate = "{DynamicResource ItemWithCoolTooltipTemplate}"
Focusable = "False">
</ListBox>
любые уловки с RelativeSource / ElementName обычно необходимы для изменения источника привязки. В этом случае DataContext (источник привязки) просто наследуется от родительского Window.
Ответ, который дал вам @ASh, является лучшим ответом далеко, чем тот, который вы сейчас выбрали.