تحتاج إلى مساعدة إضافية مع ربطات commandparameters متعددة باستخدام متعددة

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

سؤال

أحتاج إلى أن يكون لدي معالج أمر لتوقيت يمكن أن يأخذ معلمات متعددة ، أي الخاصية غير المقيدة لـ ToggleButton ، إلى جانب قيمة ثابتة ، والتي يمكن أن تكون سلسلة ، بايت ، int ... لا يهم.

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

<Binding Value="1" />

ثم جئت عبر آخر سؤال مماثل أجابه كينت بوغوارت, ، وبعد ذلك بدأت أفكر في الطرق التي يمكنني بها الالتفاف على هذا.

إحدى الطرق الممكنة هي عدم استخدام MVVM وببساطة إضافة خاصية العلامة إلى ToggleButton ، وفي هذه الحالة ، يبدو أن المتعددة المرتبات الخاصة بي ستبدو هكذا:

<MultiBinding Converter="{StaticResource MyConverter}">
    <MultiBinding.Bindings>
        <Binding Path="IsChecked" />
        <Binding Path="Tag" />
    </MultiBinding.Bindings>
</MultiBinding>

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

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

هل لدى أي شخص اقتراحات جيدة لي هنا؟ قون

تعديل - حسنًا ، لذلك أحتاج إلى تحديث روابطاتي ، والتي لا تزال لا تعمل بشكل صحيح:

    <ToggleButton Tag="1" Command="{Binding MyCommand}" Style="{StaticResource PassFailToggleButtonStyle}" HorizontalContentAlignment="Center" Background="Transparent" BorderBrush="Transparent" BorderThickness="0">
        <ToggleButton.CommandParameter>
            <MultiBinding Converter="{StaticResource MyConverter}">
                <MultiBinding.Bindings>
                    <Binding Path="IsChecked" RelativeSource="{RelativeSource Mode=Self}" />
                    <Binding Path="Tag" RelativeSource="{RelativeSource Mode=Self}" />
                </MultiBinding.Bindings>
            </MultiBinding>
        </ToggleButton.CommandParameter>
    </ToggleButton>

كان ischecked يعمل ، ولكن ليس العلامة. لقد أدركت للتو أن العلامة هي سلسلة ... duh. انه يعمل الان! كان المفتاح هو استخدام مقصورات الذات.

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

المحلول

كما هو موضح أعلاه ، اكتشفت ذلك. كان علي استخدام Self إلى عن على RelativeSource هذا أدى الغرض.

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