2015-07-13 2 views
0

Моя программа имеет собственный DependencyObject, к которому я связать значения другого DependencyObject, которые установлены в коде:WPF XAML Binding не вызывая измененное событие

<TabControl 
     Grid.Column="1" 
     Grid.Row="1"> 
     <TabItem 
      Header="XML"> 
      <TextBox 
       Text="{Binding Asset.Xml, ElementName=window}" 
       IsReadOnly="True" /> 
     </TabItem> 
     <TabItem 
      Header="Texture"> 
      <we:DXImage> 
       <we:DXImage.Renderer> 
        <we:TextureRenderer 
         Source="{Binding Asset.Image, ElementName=window}" /> 
       </we:DXImage.Renderer> 
      </we:DXImage> 
     </TabItem> 
    </TabControl> 

текстовое поле привязки к Asset.Xml работает безупречно, и если я замените xaml второго элемента на TextBox, он также отображает содержимое Asset.Image (путь к изображению строки типа). Источник Свойство визуализатора выглядит следующим образом:

private static readonly DependencyProperty SourceProperty = DependencyProperty.Register("Source", typeof(string), typeof(TextureRenderer), 
     new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender, SourceChanged)); 

    public string Source 
    { 
     get { return (string)GetValue(SourceProperty); } 
     set { SetValue(SourceProperty, value); } 
    } 

    private static void SourceChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args) 
    { 
     // Do stuff 
    } 

Однако событие SourceChanged никогда не вызывается.

Я обновил проект на GitHub: https://github.com/Qibbi/WrathEd/tree/master/WrathEd2 код XAML находится в проекте WrathEd2 в то время как DXImage, видеообработки и другие классы поддержки в WrathEd.Windows Ток MainWindow бардак код за мудрое атм , Я планирую реорганизовать его в соответствующие части при завершении проекта.

+0

В вашей привязке источника попробуйте добавить «Mode = TwoWay»? –

+0

Это не делает. – Jana

+0

Вы наблюдаете какое-либо сообщение об ошибке связи в окне вывода в Visual Studio при запуске приложения? – Clemens

ответ

-1

Согласно документации MSDN here

Вам необходимо установить NotifyOnSourceUpdated истина для вашего связывания

+0

Может ли кто-нибудь, кто проголосовал, объяснить почему? Попытка улучшить мои ответы! – user2371744

+0

Я не знаю, не был ли я, но все же это не решило проблему:/ – Jana

+0

Свойство Source в вопросе не имеет ничего общего с «источником привязки». Просто они называются «Источник». Как указывает OP в вопросе, привязка фактически работает (по крайней мере, когда целью является TextBox). Таким образом, этот ответ не имеет большого смысла. – Clemens

0

Проблема заключается в том, что ваш we:TextureRenderer не является частью VisualTree (как он находится внутри собственности). Следовательно, привязка не может найти элемент-источник.

Согласно ElementName Binding is failing, вы можете использовать

Source={x:Reference window} 

вместо ElementName=window.

Смежные вопросы