powered by simpleCommunicator - 2.0.34     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как передать DataContext в ConverterParameter ?
6 сообщений из 6, страница 1 из 1
Как передать DataContext в ConverterParameter ?
    #39936446
S_A_V_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Мне нужно как то пробросить DataContext UserControl-a в ConverterParameter. Поискал, но подходящего решения не увидел.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
<UserControl x:Class="WpfFrame.VisualShield ...>

	<UserControl.Resources>
		<local:YCoordinateConverter x:Key="YCoordinateConverter" />
	</UserControl.Resources>
	
		<Grid>
			….

			<Canvas Grid.Row="3"
					x:Name="canvas"
					Margin="0,4,0,0"
					Height="380"
					Width="40">
				
				<Line X1="20"
					  X2="20"
					  Y1="200"
					  Y2="{Binding Converter={StaticResource ZeroToYCoordinateConverter}, ConverterParameter=???}"
					  Stroke="Black"/>
					
				….

			</Canvas>

		</Grid>
	
</UserControl>



Code behind и Converter
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public partial class VisualShield : UserControl
	{
		public VisualShield(Model m)
		{
			InitializeComponent();

			this.DataContext = m;
		}
	}

	public class YCoordinateConverter : IValueConverter
	{
		public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
		{
                       // тут нужна модель переданная в  DataСontext
			….
		}

		public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
		{
			…..
		}
	}



Пробовал передать через MultiBinding. DataContext передался, но свойство Y2 перестало устанавливаться.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<Line 
X1="20"
X2="20"
Y1="200"					  
 Stroke="Black">
  <Line.Y2>					
       <MultiBinding Converter="{StaticResource YCoordinateConverter}" >
              <Binding />
       </MultiBinding>
  </Line.Y2>
</Line>



Подскажите пожалуйста как это сделать ?
...
Рейтинг: 0 / 0
Как передать DataContext в ConverterParameter ?
    #39936483
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_A_V_e
Мне нужно как то пробросить DataContext UserControl-a в ConverterParameter.

Вообще вот это:
Код: c#
1.
{Binding Converter={StaticResource ZeroToYCoordinateConverter}


как раз передаёт текущий DataContext в конвертер, только не в parameter, а в value - указание DataContext без Path как раз указывает на весь датаконтекст в целом. Нюанс в том, что такая привязка будет работать только при изменении самого DataContext - т.е. когда он будет переприсвоен, а сами изменения внутри DataContext никаких изменений в такой привязке не вызовут.
S_A_V_e
Пробовал передать через MultiBinding. DataContext передался, но свойство Y2 перестало устанавливаться.

Для Multibinding'а конвертер должен реализовывать интерфейс IMultiValueConverter, а здесь всё тот же конвертер с реализацией IValueConverter, поэтому привязка просто не работает. В окне Output студии про это должно быть сообщение об ошибке биндинга.
...
Рейтинг: 0 / 0
Как передать DataContext в ConverterParameter ?
    #39936559
S_A_V_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интерфейс IMultiValueConverter я реализовывал. Просто не показал что бы не постить лишний код. Но Y2 не устанавливается даже если константу вернуть в конвертере
Код: c#
1.
2.
3.
4.
5.
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
     // DataContext приходит в values[0], но Y2 не устанавливается
      return 300;
}
...
Рейтинг: 0 / 0
Как передать DataContext в ConverterParameter ?
    #39936586
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_A_V_e
Просто не показал что бы не постить лишний код.

Ничего, форум не треснет. А без более-менее правдоподобного когда отвечать на такие вопросы - всё равно, что гадать на кофейной гуще.
S_A_V_e
Но Y2 не устанавливается даже если константу вернуть в конвертере
Код: c#
1.
2.
3.
4.
5.
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
     // DataContext приходит в values[0], но Y2 не устанавливается
      return 300;
}


А это потому, что конвертер возвращает константу-литерал с типом int, а свойство Line.Y2 имеет тип double - биндинг ломается на несоответствии типов.
...
Рейтинг: 0 / 0
Как передать DataContext в ConverterParameter ?
    #39936594
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
объясните по нормальному, что в результате вы хотите получить.
Биндить линиюю на Canvas'е это такое себе....
мне кажется у вас изначально какой то неправильный путь.
...
Рейтинг: 0 / 0
Как передать DataContext в ConverterParameter ?
    #39936595
S_A_V_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё получилось. Действительно ломалось на несоответствии типов. Так работает (IMultiValueConverter):
Код: c#
1.
2.
3.
4.
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
      return (double)300.0;
}


Вопрос решен. Спасибо большое за помощь!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как передать DataContext в ConverterParameter ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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