سؤال

في ملف XAML بلدي، ولدي مربع القائمة المعلنة مثل هذا:

           <ListBox x:Name="lstDeck" Height="280" ItemsSource="{Binding Path=Deck}"  >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <ListBoxItem  Content="{Binding}" />
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

في بلدي نموذج عرض، الطابق هو ObservableCollection، بحيث ملزمة مباشرة يعرض محتوى مجموعتي.

ولكن عندما يكون لدي عدة القيمة التي تحمل نفس القيمة (على سبيل المثال "10" ست مرات)، التحديد في مربع القائمة لديها سلوك غريب: أنه حدد 2-3 العناصر بدلا من فقط واحد الذي أنا النقر

وعلاوة على ذلك، عندما كنت انقر لlistBoxItem آخر، فإنه لا لا تركز السابق اختيار واحد.

وبعد ذلك فإنه من المستحيل أن نرى العنصر الذي تم تحديده في الواقع، ويستحيل الحصول على قيمة SelectedIndex.

لقد شخص فكرة؟

هل كانت مفيدة؟

المحلول

والمشكلة هي أن مربع القائمة cannout التمييز بين قيم مختلفة. ولذلك، بمجرد النقر فوق واحدة من "10" ليالي، فإنه يضع ذلك الخاصية SelectedItem ويقوم بتحديث عرضه. لأنه لا يمكن التمييز بين أنواع القيمة التي يمثل كل "10" كما المحدد.

ولكن لماذا لديك "10" عدة مرات في مربع القائمة الخاصة بك؟ لو كان مجرد قيمة رقمية 10 أو السلسلة "10" أنها لا تقدم أي معنى بالنسبة لي.

إذا كان لديك نموذج أكثر تعقيدا وراء ذلك وأنت مجرد عرض خاصية واحدة، مما يجب ربط نموذج معقد وتعيين DisplayMemberPath بدلا من ذلك.

وC #

public class Model
{
    public Guid Id { get; set; }
    public string Value { get; set; }
}

وXAML

<ListBox ItemsSource="{Binding Path=Models}" DisplayMemberPath="Value" />

<ListBox ItemsSource="{Binding Path=Models}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=Value}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

وأطيب التحيات
أوليفر هانابي

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top