[WPF] XamlParseError - баг Студии
От: Namelles.One  
Дата: 19.01.11 13:28
Оценка:
Программлю на WPF, Студия 2010, .NET 3.5

Написал такую конструкцию, работает все окей, но при очередном заходе в Студии стало выдавать радостное:

A 'Binding' cannot be used within a 'TreeView' collection. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.

Причем работать — не перестало. Как побороть, а то с такой ошибкой графический редактор Студии не дает с ним работать(

Подчеркиваю — весь код валиден, после компиляции — все работает как надо.

       <TreeView Name="Tree"  ItemsSource="{Binding Items}"
                  DataContext="{Binding Source={StaticResource ViewModel}}"
                  behaviors:MouseOverBehavior.Command="{Binding MousedOver}">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate
                                  ItemsSource="{Binding Path=Items}">
                    <TextBlock Text="{Binding Path=Name}"/>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>



using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace MouseClickBehavior
{
    public class MouseOverBehavior : CommandBehaviorBase<Control>
    {
        private MouseOverBehavior(Control element)
            : base(element)
        {
            element.MouseDoubleClick += MouseEnter;
        }

        void MouseEnter(object sender, MouseEventArgs e)
        {
            ExecuteCommand();
        }

        public static void SetCommand(DependencyObject obj, ICommand value)
        {
            obj.SetValue(CommandProperty, value);
        }

        // Using a DependencyProperty as the backing store for Command.  This enables animation, styling, binding, etc...
        private static readonly DependencyProperty CommandProperty =
            DependencyProperty.RegisterAttached("Command", typeof(ICommand), typeof(MouseOverBehavior), new PropertyMetadata(OnSetCommandCallback));


        private static void OnSetCommandCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
        {
            var element = dependencyObject as Control;
            if (element != null)
            {
                new MouseOverBehavior(element) {Command = e.NewValue as ICommand};
            }
        }
    }
}



using System.ComponentModel;
using System.Windows;

namespace MouseClickBehavior
{
    public class ModuleAViewModel : INotifyPropertyChanged
    {
        public ModuleAViewModel()
        {
            MousedOver = new DelegateCommand<object>(ItemMousedOver);
        }

        //Commands
        public DelegateCommand<object> MousedOver { get; private set; }


        private static void ItemMousedOver(object o)
        {
            MessageBox.Show("123");
        }



        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion
    }
}
Re: [WPF] XamlParseError - баг Студии
От: Sergey_BG Россия  
Дата: 25.01.11 12:46
Оценка:
Здравствуйте, Namelles.One, Вы писали:

У меня несколько раз было, что все компилировалось, запускалось, а ошибка в XAML была. Объект не был DependencyObject, а это требовалось. Закрыть xaml, rebuild, опять открыть, обычно помогало найти ошибку.

В твоем примере, не совсем понятно, что такое ViewModel и далее...

Я обычно удаляю из XAML код частями и смотрю все ли нормально. Если после удаления какой-то его части ошибки исчезли, то аккуратно добавляю обратно.
Сергей
Re[2]: [WPF] XamlParseError - баг Студии
От: Namelles.One  
Дата: 25.01.11 16:45
Оценка:
Здравствуйте, Sergey_BG, Вы писали:

S_B>Здравствуйте, Namelles.One, Вы писали:


S_B>У меня несколько раз было, что все компилировалось, запускалось, а ошибка в XAML была. Объект не был DependencyObject, а это требовалось. Закрыть xaml, rebuild, опять открыть, обычно помогало найти ошибку.


S_B>В твоем примере, не совсем понятно, что такое ViewModel и далее...


S_B>Я обычно удаляю из XAML код частями и смотрю все ли нормально. Если после удаления какой-то его части ошибки исчезли, то аккуратно добавляю обратно.


А между тем проблема решена:
в
private static readonly DependencyProperty CommandProperty


заменил private на public и все заработало как надо. Забавно.
Re[3]: [WPF] XamlParseError - баг Студии
От: Sinix  
Дата: 25.01.11 16:53
Оценка:
Здравствуйте, Namelles.One, Вы писали:

NO>заменил private на public и все заработало как надо. Забавно.

Угу, сообщения об ошибках не отличаются умом и сообразительностью наглядностью.
За необходимость использования debug output для отлавливания ошибок с биндингом разработчиков надо немножко расстрелять
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.