Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Почему не работает Биндинг?

81K
13 августа 2012 года
Suliman1
8 / / 13.08.2012
Изучаю Шарп. Не могу понять почему пне работает биндинг. Задача научиться передавать значение из кода в xml.
Сам код формы:

Код:
<UserControl x:Class="SilverlightApplication1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"            
    xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
    x:Name="Dima"

    Width="1220" Height="960"
    MouseEnter="User_Control_MouseEnter" >
 
    <Grid x:Name="rootCanvas"
  Width="640"
  Height="480"
  Background="Gray"
  >
        <Rectangle Height="100" HorizontalAlignment="Left" Margin="118,166,0,0" Name="rectangle1" Stroke="Black" StrokeThickness="1" VerticalAlignment="Top" Width="200" Fill="#5C00FF00" MouseEnter="mouse_rectangle" />

        <TextBox Height="{Binding ElementName=Dima, Path=test}" HorizontalAlignment="Left" Margin="444,167,0,0" Name="textBox1" VerticalAlignment="Top" Width="151"/>
    </Grid>
</UserControl>
CS код:

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;


namespace SilverlightApplication1
{
    public partial class MainPage : UserControl
    {

        public MainPage()
        {
            InitializeComponent();
            test = 233;

         }

        private void User_Control_MouseEnter(object sender, MouseEventArgs e)
        {
            textBox1.Background = new SolidColorBrush(Colors.Blue);

            textBox1.Text = e.GetPosition(null).X.ToString();
         
        }

       
        private void mouse_rectangle(object sender, MouseEventArgs e)
        {

        }

        int test;
        public int Test
        {
            get { return test; }
            set
            {
           //     test = 33;
            }
       
        }

       

    }
}
277
13 августа 2012 года
arrjj
1.7K / / 26.01.2011
xaml чувствителен к регистру.
 
Код:
<TextBox Height="{Binding ElementName=Dima, Path=Test}" HorizontalAlignment="Left" Margin="444,167,0,0" Name="textBox1" VerticalAlignment="Top" Width="151"/>
так попробуй
81K
13 августа 2012 года
Suliman1
8 / / 13.08.2012
Что-то не работает... Явно где-то в коде упущение...
Еще раз поясню идею - хочу через биндинг подвязать движение мыши к изменению размера текстового поля.
40K
13 августа 2012 года
D129
228 / / 18.04.2012
Надо еще евент реализовывать :


Код:
class Model : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;


        int _Test;

        public int Test
        {
            get
            {
                return _Test;
            }
            set
            {
                if (_Test != value)
                {
                         _Test = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("Test");
                    }
                }
            }
        }
    }

типа так.
81K
13 августа 2012 года
Suliman1
8 / / 13.08.2012
Как в мой код вставить данный ивент?
40K
13 августа 2012 года
D129
228 / / 18.04.2012
добавьте интрефейс
: INotifyPropertyChanged

он запросит имплементацию - сделайте ее (из квадратика под именем итерфейса)

Для "подьема" эвента можно написать функцию


 
Код:
private void PropChange(string PropName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(PropName));
            }
        }

и вызывать ее из каждого сеттера свойств.
81K
13 августа 2012 года
Suliman1
8 / / 13.08.2012
Мне пока сложно в этом разобраться, не могли бы показать уже вставленный код?
Я пока сделал так:

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;


namespace SilverlightApplication1
{
    public partial class MainPage : UserControl
    {

        public MainPage()
        {
            InitializeComponent();
            test = 233;

         }

        private void User_Control_MouseEnter(object sender, MouseEventArgs e)
        {
            textBox1.Background = new SolidColorBrush(Colors.Blue);
          //  textBox1.Text = e.GetPosition(null).X.ToString();
            textBox1.Text = test.ToString();
        }

       
        private void mouse_rectangle(object sender, MouseEventArgs e)
        {
       //     MessageBox.Show(Test);

        }



        private void PropChange(string PropName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(PropName));
            }
        }


        class DataContent : INotifyPropertyChanged
        {

            int test;
            public int Test
            {
                get { return test; }
                set
                {
                    test = 33;

                }

            }

        }

       

    }
}
Однако оно ругается:
Error 1 The type or namespace name 'INotifyPropertyChanged' could not be found (are you missing a using directive or an assembly reference?)
40K
13 августа 2012 года
D129
228 / / 18.04.2012
Ну да, у вас же еще в добавок сильверлайт....
Но там тоже должно быть что-то подобное.
40K
13 августа 2012 года
D129
228 / / 18.04.2012
http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged%28v=vs.95%29.aspx#Y0

подключите сборку, и добавьте using System.ComponentModel;
40K
13 августа 2012 года
D129
228 / / 18.04.2012
Код:
class DataContent : INotifyPropertyChanged
        {

   
 public event PropertyChangedEventHandler PropertyChanged;
            int test;
            public int Test
            {
                get { return test; }
                set
                {
                    test = value;
            PropChange("Test")

                }

            }


   private void PropChange(string PropName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(PropName));
            }
        }

        }
смысл такой, что датаконтекст уведомляет об изменении свойства
путем вызова эвента - а на эвент подписан биндинг.
по строке с именем свойства он знает, какой get вызывать.
40K
13 августа 2012 года
D129
228 / / 18.04.2012
Если вы ошибетесь в стоке - забудете изменить имя свойства - то компилятор вам ничего не скажет, а работать не будет.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог