[英]Bind to Code Behind Property in WPF
我想綁定到我背后的代碼中的屬性。 到目前為止,我發現的內容並不能完全幫助我,但它已經使我到達了我所在的位置。
我想做的是將bool
綁定到DataTrigger
以便在編輯了內部表時可以在文件夾名稱旁邊設置“ *”,表示現在可以選擇保存。 我知道我的事件處理設置正確,因為在調試屬性時,我希望它是該值。
從我所看到的一切來看,這應該可行,但是大多數示例都與設置文本有關。 這是包含綁定的代碼塊,以供參考:
<HierarchicalDataTemplate DataType="{x:Type vm:EditableDatabaseNode}" ItemsSource="{Binding Nodes}">
<StackPanel Orientation="Horizontal">
<Image Source="Resources\db.png" Style="{StaticResource tvImage}"/>
<TextBlock Text="{Binding Name}"/>
<TextBlock Name="tb_modfied" Text=""/>
</StackPanel>
<HierarchicalDataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=IsChanged}" Value="True">
<Setter TargetName="tb_modfied" Property="Text" Value="*"/>
</DataTrigger>
</HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>
這是代碼塊的第8行,如果您無法推斷出它,我會遇到麻煩。
編輯:以防萬一,像我一樣,您懶得閱讀評論。 該財產是我后面的代碼中的公共財產。 至於綁定相關的錯誤,存在NullReferenceException
因為綁定沒有鈎到任何東西
這正是我的錯誤所說的內容:
System.Windows.Data錯誤:17:無法從“(類型” MainWindow”)獲取“ IsChanged”值(類型“ Boolean”)。 BindingExpression:Path = IsChanged; DataItem ='MainWindow'(Name =''); 目標元素是“ ContentPresenter”(名稱=“ PART_Header”); target屬性為'NoTarget'(類型'Object')TargetInvocationException:'System.Reflection.TargetInvocationException:調用的目標引發了異常。 ---> System.NullReferenceException:對象引用未設置為對象的實例。
這里有兩個問題。
首先,您需要從<TextBlock>
標記中刪除Text=""
在<Tag>
本身內定義的屬性優先於任何已觸發的值,因此該值不會更改。
您可以在Dependency Property Precedence的MSDN頁面上閱讀有關它的更多信息。
第二個問題是觸發器本身的綁定。
設置為
Binding="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=IsChanged}"
這意味着“向后看樹,直到找到第一個Window
對象,並檢查IsChanged
屬性” 。 除了我非常確定Window類沒有名為IsChanged的屬性外。
您很可能希望綁定到當前項目的DataContext,因此綁定應類似於
<DataTrigger Binding="{Binding IsChanged}" Value="True">
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.