簡體   English   中英

WPF-DataTemplate-在附加屬性中使用元素綁定

[英]WPF - DataTemplate - Using element binding within an attached property

我正在使用格式豐富的ListBox的應用程序。 我需要做的一件事情是將多個信息綁定到位於ListBox的DataTemplate中的按鈕上。

這是我為幫助您了解問題而編寫的實際代碼的過度簡化。

這是可以工作的DataTemplate內部的XAML塊:

<Button Command="local:MediaCommands.StreamVideo"
    CommandParameter="{Binding Path=Folder}" />

當我按下按鈕時,它將發送該列表所基於的數據項的Folder屬性(當前列表項所顯示的ItemsSource成員)。 但是,我需要另一條數據,即當前項目的Filename屬性。 為此,我建立了一個新類FileInfo ,其中包含FolderFilename依賴項屬性。 然后,我將XAML代碼替換為:

<Button Command="local:MediaCommands.StreamVideo">
    <Button.CommandParameter>
        <data:FileInfo Folder="{Binding Path=Folder}"
            Filename="{Binding Path=Filename}" />
    </Button.CommandParameter>
</Button>

但是,我的代碼向我發送的唯一內容是一個空白的FileInfo對象。 請注意,如果我將上面的XAML更改為包含FolderFilename文字值,則代碼可以正常工作,因為它可以正確創建FileInfo對象並分配正確的屬性。

作為參考,我的FileInfo類看起來像這樣:

class FileInfo : DependencyObject {
    public static readonly DependencyProperty FolderProperty;
    public static readonly DependencyProperty FilenameProperty;
    static FileInfo() {
        FolderProperty = DependencyProperty.Register("Folder",
            typeof(string), typeof(FileInfo));
        FilenameProperty = DependencyProperty.Register("Filename",
            typeof(string), typeof(FileInfo));
    }
    public string Folder {
        get { return (string) GetValue(FolderProperty); }
        set { SetValue(FolderProperty, value); }
    }
    public string Filename {
        get { return (string) GetValue(FilenameProperty); }
        set { SetValue(FilenameProperty, value); }
    }
}

在這種情況下,我可以忽略對數據對象本身的引用(在我的實際應用程序中,我需要從幾個嵌套的ListBox繪制數據,但問題是相同的),任何人都可以看到在這里嗎? 我的依賴屬性是否未正確聲明? 我需要對綁定做一些古怪的事情嗎?

未明確聲明Source的綁定依賴於DataContext作為其Source。 您尚未在FileInfo實例上聲明DataContext,這通常意味着將使用繼承的DataContext。 DataContext繼承取決於FrameworkElement和運行時視覺樹,當您使用分配給不顯示在樹中的屬性的非FrameworkElement派生類時,兩者都不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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