MVVM WPF: تعكس خاصية عناصر التحكم في ViewModel ، عندما يتم تشغيل الأحداث

StackOverflow https://stackoverflow.com/questions/3708000

سؤال

حسنًا ، أحاول فهم WPF ونمط MVVM الشهير.

الآن لدي هذه القضية. أنا أستخدم التحكم في الشريط مع عدة علامات تبويب. في ViewModel ، لدي خاصية "activetab (سلسلة)" والتي يجب أن تعكس علامة التبويب النشطة حاليًا.

نظرًا لأن RibbonControl لا يحتوي على أي خاصية تعرض هذه المعلومات التي لا يمكنني ربطها بها.

لذلك كنت أفكر:

يمكنني ربط الحدث المحدد مثل هذا:

        <r:RibbonTab Label="tab1" Selected="RibbonTab_Selected"></r:RibbonTab>
        <r:RibbonTab Label="tab2" Selected="RibbonTab_Selected"></r:RibbonTab>
        <r:RibbonTab Label="tab3" Selected="RibbonTab_Selected"></r:RibbonTab>
        <r:RibbonTab Label="tab4" Selected="RibbonTab_Selected"></r:RibbonTab>
        <r:RibbonTab Label="tab5" Selected="RibbonTab_Selected"></r:RibbonTab>

ثم في CodeBehind قم بتعيين الخاصية في ViewModel باستخدام ActiveTab = sender.label

ولكن بعد ذلك ، سأحتاج إلى refference إلى ViewModel الخاص بي في CodeBehind من وجهة نظري.

أحاول حل هذه المشكلة دون استخدام أي رمز وراء الملفات. (MVVM).

الآن السؤال الحقيقي:هل من الممكن بطريقة ما استخدام EventTrigger أو EventSetter. أنه عندما يتم إطلاق الحدث المحدد. يقوم Setter بتعيين خاصية ActiveTab بشكل تلقائي على قيمة Sender.label؟.

باستخدام XAML فقط.

- أعذاري على سؤالي اللغوي السيئ إلى حد ما وربما سؤالي noobish. أنا جديد جدًا في WPF =)


تحديث:كما اكتشفت للتو ، هناك خاصية Isselected على ribbontab.

الآن لدي بعض المشكلات حول كيفية ربطها بالمتناسق في ViewModel.

جربت الرمز التالي:

<Style TargetType="{x:Type r:RibbonTab}">
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="{Binding SelectedTab}" Value="{Binding RelativeSource=Self, Path=Label}" />
                    </Trigger>
                </Style.Triggers>
            </Style>

لكن هذا لا يعمل:

Error   1   Cannot find the Style Property 'SelectedTab' on the type 'Microsoft.Windows.Controls.Ribbon.RibbonTab'. 

SelectionTab Offcourse في ViewModel الخاص بي وليس في Ribbontab ...

كيف يمكنني جعل setter ، تعيين الخاصية على ViewModel الخاص بي مع قيمة علامة التبويب؟ =)

شكرا مقدما!!

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

المحلول

إصدار أغسطس من Microsoft Ribbon ، يحتوي Ribbontab على خاصية تبعية Isselected ، لذلك يجب أن تكون قادرًا على ربط ذلك.

نصائح أخرى

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

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

في كلتا الحالتين ، تحتاج إلى الحصول على علامة التبويب المحددة حاليًا في محرك الربط لتتمكن من ربط أي شيء به (إما الملصق أو ViewModel) ويمكنه الدخول فقط إلى المحرك من خلال خصائص التبعية. لذلك لن تتمكن من القيام بذلك بالكامل في XAML ، لكنك ستتمكن من القيام بذلك دون تقديم اقتران بين العرض و ViewModel.


عند النظر إلى وثائق التحكم في شريط Microsoft لـ WPF ، هل جربت خاصية Ribbon.SelectedItem؟ يبدو لي وكأنه يجب أن يمنحك علامة التبويب المحددة حاليًا.

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