powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Binding на уровень выше {Binding ../Item} - как?
13 сообщений из 13, страница 1 из 1
Binding на уровень выше {Binding ../Item} - как?
    #39278617
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть ViewModel:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
	class TestViewModel2
	{
		public string[] ItemsForCombo { get; set; }

		public ObservableCollection<SomeItem> ItemsForList { get; set; }
	}

	class SomeItem
	{
		public string Name { get; set; }
		public int Volume { get; set; }
		public int SelectedIndex { get; set; }
	}



Есть форма, на ней вверху сомбик, а потом ListBox, в котором каждый итем отображает структуру SomeItem. Так же в каждой строке должен быть комбик, заполненный теми же строками, что и комбик на форме:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
		<ListBox ItemsSource="{Binding ItemsForList}">
			<ListBox.ItemTemplate>
				<HierarchicalDataTemplate DataType="controls:SeriaAttr">
					<StackPanel>
						<Label Content="{Binding Name}" />
						<Label Content="{Binding Volume}" />
						<ComboBox ItemsSource="{Binding ???}" SelectedIndex="{Binding SelectedIndex}" />
					</StackPanel>
				</HierarchicalDataTemplate>
			</ListBox.ItemTemplate>
		</ListBox>


Как сделать для комбиков в листе биндинг, что бы не копировать ItemsForCombo в каждый SomeItem?
...
Рейтинг: 0 / 0
Binding на уровень выше {Binding ../Item} - как?
    #39278622
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например на уровне ListBox-а объявить присоединяемое свойство и привязать его к выбранному элементу в комбике, а элементы привязать к этому же присоединяемому свойству через FindAncestor
...
Рейтинг: 0 / 0
Binding на уровень выше {Binding ../Item} - как?
    #39278757
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понял...
...
Рейтинг: 0 / 0
Binding на уровень выше {Binding ../Item} - как?
    #39278822
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
4.
5.
		<ListBox ItemsSource="{Binding ItemsForList}" local:MyClass.MyProperty="{Binding куданадо}">
...
						<ComboBox ItemsSource="{Binding Path=(local:MyClass.MyProperty), RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListBox}}" 
...
		</ListBox>

Как-то так (сорри, если где-нить опечатка в синтаксисе, писал по памяти)

"куданадо" - это как раз привязка к источнику (выше сказал "к текущему элементу" - невнимательно прочитал вопрос)
...
Рейтинг: 0 / 0
Binding на уровень выше {Binding ../Item} - как?
    #39278904
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё понятно, спасибо
...
Рейтинг: 0 / 0
Binding на уровень выше {Binding ../Item} - как?
    #39279054
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

есть способ проще, у ItemsControl есть виртуальный метод PrepareContainerForItemOverride и GenerateItemContrainer, как раз в первом и просходит определение таких свойств как ContentTemplate\Selector, задается стиль, особенно актуально для TreeView, где стиль надо передавать на каждый уровень иерархии, хотя я редко его использую и строю деревья в ListBox.
Короче можно просто наследовать класс, не переопределяя свойство DefaultStyleKey и этот контрол будет использовать стили обычного ListBox'а, но с доп. функционалом )
...
Рейтинг: 0 / 0
Binding на уровень выше {Binding ../Item} - как?
    #39279841
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro , я не свойство присоединил, я просто сделал поиск не по ListBox-у, а по Window:

Код: xml
1.
2.
3.
4.
5.
6.
7.
		<ListBox HorizontalContentAlignment="Stretch" ItemsSource="{Binding ItemsForList}">
			<ListBox.ItemTemplate>
				<DataTemplate>
					<ComboBox ItemsSource="{Binding Path=ItemsForCombo, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" SelectedIndex="{Binding SelectedIndex}" />
				</DataTemplate>
			</ListBox.ItemTemplate>
		</ListBox>



ну и в окошке добавил:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
	public partial class Window3 : Window
	{
		public Window3()
		{
			InitializeComponent();
		}

		public string[] ItemsForCombo
		{
			get
			{
				return (this.DataContext as TestViewModel3).ItemsForCombo;
			}
		}
	}
...
Рейтинг: 0 / 0
Binding на уровень выше {Binding ../Item} - как?
    #39279842
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes, это что-то совсем не понятное. У меня даже сложилось впечатление, что это, возможно, должно быть в каком-то другом треде (-:
...
Рейтинг: 0 / 0
Binding на уровень выше {Binding ../Item} - как?
    #39279846
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thя не свойство присоединил, я просто сделал поиск не по ListBox-у, а по Window:Ну тут уже получается немножко не MVVM.
...
Рейтинг: 0 / 0
Binding на уровень выше {Binding ../Item} - как?
    #39291483
Cossacker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

<ComboBox ItemsSource="{Binding Path=DataContext.ItemsForCombo, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListBox}}"
...
Рейтинг: 0 / 0
Binding на уровень выше {Binding ../Item} - как?
    #39291562
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а кто сказал, что DataContext задан для ListBox-а?
...
Рейтинг: 0 / 0
Binding на уровень выше {Binding ../Item} - как?
    #39292746
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну там же написано: ItemsSource="{Binding ItemsForList}", значит, есть контекст.
...
Рейтинг: 0 / 0
Binding на уровень выше {Binding ../Item} - как?
    #39292985
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
контекст есть, но он задан выше.
А свойство ListBox.DataContext, к которому обращается Cossacker, не задано, равно null
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Binding на уровень выше {Binding ../Item} - как?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]