powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Ошибка биндинга :((
4 сообщений из 4, страница 1 из 1
Ошибка биндинга :((
    #36392346
renaton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток уважаемые знатоки замла!!
Хочу вот реализовать такой простой биндинг: пункт меню контекстного меню задать Header в зависимости от значения слайдера прмерно вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<Window x:Class="Binding.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:MyCLR="clr-namespace:Binding"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <MyCLR:TextToObject x:Key="MyConv"/>
    </Window.Resources>
    <Grid>
        <TextBox Margin="48,95,110,0" Name="textBox1" Height="22" VerticalAlignment="Top" 
         Text="{Binding ElementName=slider1, Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
        <ListBox Margin="62,123,62,39" Name="listBox1" Background="LightSalmon">
            <ListBox.ContextMenu>
                <ContextMenu x:Name="MyMenu" DataContext="{Binding PlacementTarget, RelativeSource={RelativeSource Self}}"> 
                    <MenuItem x:Name="MyItem" Header="{Binding ElementName=slider1, Path=Value, Converter={StaticResource MyConv}}"/>
                </ContextMenu>
            </ListBox.ContextMenu>
        </ListBox>
        <Slider Height="22" Margin="85,36,93,0" Name="slider1" VerticalAlignment="Top" SmallChange="1" />
    </Grid>
</Window>
вот код конвертера:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Data;
using System.Globalization;

namespace Binding
{
    [ValueConversion (typeof(double), typeof(object))]
    class TextToObject:IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            object val = (object)value;
            return val;
        }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            double val = (double)value;
            return val;
        }
    }
}
В OUTPUT вижу такое:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=slider1'. BindingExpression:Path=Value; DataItem=null; target element is 'MenuItem' (Name='MyItem'); target property is 'Header' (type 'Object')
В чем может быть ошибка? Исходные коды проекта прилагаю
...
Рейтинг: 0 / 0
Ошибка биндинга :((
    #36392856
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня все нормально скомпилировалось и запустилось.
...
Рейтинг: 0 / 0
Ошибка биндинга :((
    #36392942
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перечитал еще раз... действительно, генерирует ошибку - контекстного меню я и не заметил

Говорят, проблема известная. Решение простое - не использовать Binding для контекстных меню и всплывающих окон

Как пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
	public class SliderValueHolder
	{
		public SliderValueHolder()
		{
			Value = 0;
		}
		public object Value { get; set; }
	}



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<Window x:Class="Binding.Window1"
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:MyCLR="clr-namespace:Binding"
	Title="Window1" Height="300" Width="300">
	<Window.Resources>
		<MyCLR:SliderValueHolder x:Key="SliderValueHolder"/>
	</Window.Resources>
	<Grid>
		<Slider Height="22" Margin="85,36,93,0" 
				Value="{Binding Source={StaticResource SliderValueHolder}, Path=Value, Mode=TwoWay}"
				VerticalAlignment="Top" SmallChange="1" />
		<ListBox Margin="62,123,62,39" Background="LightSalmon">
			<ListBox.ContextMenu>
				<ContextMenu>
					<MenuItem Header="{Binding Source={StaticResource SliderValueHolder}, Path=Value}" />
				</ContextMenu>
			</ListBox.ContextMenu>
		</ListBox>
	</Grid>
</Window>

И все работает...
...
Рейтинг: 0 / 0
Ошибка биндинга :((
    #36393240
renaton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman S. GolubinПеречитал еще раз... действительно, генерирует ошибку - контекстного меню я и не заметил
Говорят, проблема известная. Решение простое - не использовать Binding для контекстных меню и всплывающих окон
И все работает...
А если использовать LinqDataSource или ObjectDataSource? То есть а БД MS SQL 2005 некая база в этой базе таблица примерно такого вида:
OBJECT_IDOBJECT_STATEOBJECT_NAME1200Переключатель 11211Переключатель 21241Переключатель 4
Мне надо по полю OBJECT_ID привязать Polyline и Rectangle в XAML к значению контекстного меню IsChecked у этих Polyline и Rectangle к полю OBJECT_STATE и чтобы биндинг был TwoWay
Спасибо!!!
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Ошибка биндинга :((
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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