تحتاج إلى مساعدة إضافية مع ربطات commandparameters متعددة باستخدام متعددة
-
24-09-2019 - |
سؤال
أحتاج إلى أن يكون لدي معالج أمر لتوقيت يمكن أن يأخذ معلمات متعددة ، أي الخاصية غير المقيدة لـ 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
هذا أدى الغرض.