簡體   English   中英

在WPF中綁定到代碼隱藏屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM