wpf - كتاب - وف ليستبوكس ربط فهرس العنصر



كتاب تعلم wpf (1)

من السهل ربط شيء إلى سيلكتديندكس من ليستبوكس، ولكن أريد كل عنصر في ليستبوكس تكون قادرة على ربط فهرس في القائمة.

قد يبدو غريبا، وهنا ما أحاول القيام به:

<DataTemplate x:Key="ScenarioItemTemplate">
<Border
    Margin="8,2,8,2"
    Background="#FF3C3B3B"
    BorderBrush="#FF797878"
    BorderThickness="2"
    CornerRadius="5">
    <DockPanel>
        <DockPanel DockPanel.Dock="Top" Margin="0,2,0,0">
            <Label HorizontalAlignment="Left"
                   DockPanel.Dock="Left"
                   FontWeight="Heavy"
                   Foreground="White"
                   Content="{Binding Path=Position}"
                   MinWidth="50"/>

            <Label
                   Content="{Binding Path=Name}"
                   DockPanel.Dock="Left"
                   FontWeight="Heavy"
                   Foreground="white"/>
            <Label 
                   Content="{Binding Path=Header}"
                   Foreground="white"
                   DockPanel.Dock="Left"/>

            <TextBlock HorizontalAlignment="Right" 
                       Background="#FF3C3B3B" 
                       DockPanel.Dock="Left" Foreground="White" FontWeight="Heavy">
                <Hyperlink Click="CloseHyperlink_Click" Tag="">X</Hyperlink>
            </TextBlock>

أريد ربط خاصية تاج للارتباط التشعبي بفهرس العنصر المعني. بحيث عندما ينقر المستخدم على الارتباط التشعبي، يمكنني تحديد العنصر الذي تسبب في الحدث باستخدام الخاصية تاج من هذا الارتباط التشعبي.

var hyperlink = (Hyperlink)sender;
var index = Convert.ToInt32(hyperlink.Tag);

اقتراحات؟


بقدر ما أعرف، ليس هناك حقا الملكية التي تشير إلى مؤشر البند الخاص بك. إذا كان لديك حق الوصول إلى القائمة الأصلية من العناصر التي لا بد من مربع القائمة لديك، يمكنك الوصول إلى داتاكونتيكست الارتباط التشعبي الخاص بك لتحديد فهرس العنصر الخاص بك، مثل هذا:

var hyperlink = (Hyperlink)sender;
var item = (SourceType)hyperlink.DataContext;
int index = sourceList.IndexOf(item);

بدلا من ذلك، يمكنك استدعاء ItemsControl.ContainerFromElement على الارتباط التشعبي للحصول على ليستبوكسيتم المرتبطة الارتباط التشعبي ثم العثور على موضع ليستبوكسيتم في ليستبوكس، لكنه لا حقا تحصل على أي شيء لم يكن لديك بالفعل.





datatemplate