Невозможно установить ComboBoxItem.IsEnabled для привязки - PullRequest
0 голосов
/ 14 августа 2010

У меня был целый день особенностей Silverlight, включая эту маленькую глупость:

<ComboBox>
    <ComboBox.ItemContainerStyle>
        <Style TargetType="ComboBoxItem">
            <Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>
        </Style>
    </ComboBox.ItemContainerStyle>

    <ComboBoxItem>First</ComboBoxItem>
    <ComboBoxItem>Second</ComboBoxItem>
</ComboBox>

Сказанное выше не работает с:

  System.Windows.Markup.XamlParseException occurred
    Message=Set property '' threw an exception. [Line: 88 Position: 52]
    LineNumber=88
    LinePosition=52
    StackTrace:
         at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
    InnerException: System.NotSupportedException
         Message=Cannot set read-only property ''.
         StackTrace:
              at MS.Internal.XamlMemberInfo.SetValue(Object target, Object value)
              at MS.Internal.XamlManagedRuntimeRPInvokes.SetValue(XamlTypeToken inType, XamlQualifiedObject& inObj, XamlPropertyToken inProperty, XamlQualifiedObject& inValue)
         InnerException: 

Если я изменю {Binding IsEnabled} на простоTrue или False, тогда все работает нормально.

Я совершенно сбит с толку, потому что ComboBoxItem.IsEnabled является DependencyProperty и не только для чтения, поэтому сообщение об ошибке завершеномусор.

Есть идеи как это исправить?В конечном итоге все, что я хочу сделать, - это иметь свойство IsEnabled в ComboBoxItem s, которое будет связано со свойством в моей модели представления.

PS.Да, я также попытался связать ItemsSource с моей коллекцией моделей представлений и убедиться, что свойство IsEnabled действительно существует в моих моделях представлений.Та же проблема.

Ответы [ 3 ]

1 голос
/ 14 августа 2010

Я обошел это сейчас, переопределив PrepareContainerForItemOverride следующим образом:

protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
    base.PrepareContainerForItemOverride(element, item);

    // can't do this in ItemContainerStyle because SL is poo
    (element as ComboBoxItem).SetBinding(ComboBoxItem.IsEnabledProperty, new Binding("IsEnabled"));
}

Это действительно все еще невозможно в SL4?Мне кажется это совершенно нелепым, как и все другие проблемы, с которыми я столкнулся сегодня.

0 голосов
/ 26 июня 2013

Я знаю, что эта ветка старая, но сегодня я столкнулся с той же проблемой, и я просто хочу подтвердить, что Дейв Лоутер предложил проблему этого случая.После изменения имени свойства с IsEnabled на IsComboBoxItemEnabled все стало работать правильно, поэтому просто не используйте IsEnabled имя в вашей модели

0 голосов
/ 23 ноября 2010

Возможно, это далеко от основы (и слишком поздно), но может ли это быть связано с именованием свойства связанного объекта, совпадающего с заданным вами свойством?

<Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>

Можете ли вы сделать это в XAML, если путь не IsEnabled?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...