Проблема с привязкой Silverlight ComboBoxItem - PullRequest
0 голосов
/ 21 марта 2011

Я просто не могу заставить работать следующую ситуацию: У меня есть класс со следующей реализацией:

public class SelectionItem<T> : ViewModelBase where T : Entity
{
    private bool? _isSelected;
    public bool? IsSelected
    {
        get { return _isSelected; }
        set
        {
            _isSelected = value;
            RaisePropertyChanged("IsSelected");
        }
    }

    public T Item { get; set; }
}

И у меня есть следующее свойство в моей ViewModel:

    private IEnumerable<SelectionItem<DB_Aux_Pessoas>> _vendedores;
    public IEnumerable<SelectionItem<DB_Aux_Pessoas>> Vendedores
    {
        get
        {
            return _vendedores;
        }
        set
        {
            _vendedores = value;
            RaisePropertyChanged("Vendedores");
        }
    }

Затем, в моем представлении, у меня есть ComboBox:

                    <ComboBox Margin="3,0,0,0"
                              Height="23"
                              Width="200"
                              ItemsSource="{Binding Vendedores, Mode=TwoWay}"
                              Grid.Column="1"
                              Grid.Row="1"
                              HorizontalAlignment="Left">
                        <ComboBox.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}" />
                                    <TextBlock Text="{Binding Item.NomeRazaoSocial}" />
                                </StackPanel>
                            </DataTemplate>
                        </ComboBox.ItemTemplate>
                    </ComboBox>

Но когда я изменяю CheckBox на ComboBoxItem, он не отражается на свойстве.

Код для DB_Aux_Pessoasниже:

[MetadataTypeAttribute(typeof(DB_Aux_Pessoas.DB_Aux_PessoasMetadata))]
public partial class DB_Aux_Pessoas
{

    // This class allows you to attach custom attributes to properties
    // of the DB_Aux_Pessoas class.
    //
    // For example, the following marks the Xyz property as a
    // required property and specifies the format for valid values:
    //    [Required]
    //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
    //    [StringLength(32)]
    //    public string Xyz { get; set; }
    internal sealed class DB_Aux_PessoasMetadata
    {

        // Metadata classes are not meant to be instantiated.
        private DB_Aux_PessoasMetadata()
        {
        }

        public Nullable<short> Cliente { get; set; }

        public string Id_Numero { get; set; }

        public string NomeRazaoSocial { get; set; }

        public Nullable<short> Supervisor { get; set; }

        public Nullable<short> Vendedor { get; set; }
    }
}

Что я здесь не так делаю?Ткс заранее.

Ответы [ 3 ]

0 голосов
/ 22 марта 2011

Это прекрасно работает для меня.Добавьте дополнительное свойство, чтобы получить визуальную обратную связь, например:

public class SelectionItem<T> : ViewModelBase
{
    private bool? _isSelected;
    public bool? IsSelected
    {
        get { return _isSelected; }
        set
        {
            _isSelected = value;
            RaisePropertyChanged("IsSelected");
            RaisePropertyChanged("Feedback");
        }
    }

    public string Feedback
    {
        get
        {
            if (!this.IsSelected.HasValue)
            {
                return "null";
            }

            if (this.IsSelected.Value)
            {
                return "yes";
            }

            return "no";
        }
    }


    public T Item { get; set; }
}

И в свой xaml добавьте дополнительный TextBlock, чтобы показать результат:

<ComboBox Grid.Column="1"
                  Grid.Row="1"
                  Height="23"
                  Margin="3,0,0,0"
                  Width="200"
                  HorizontalAlignment="Left"
                  ItemsSource="{Binding Vendedores, Mode=TwoWay}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}" />
                        <TextBlock Text="{Binding Item.NomeRazaoSocial}" />
                        <TextBlock Text="{Binding Feedback}" Margin="5,0,0,0" />
                    </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>

Если вы видите «Да»"," Нет "," Нуль "меняется, когда вы нажимаете на флажки, то это работает.Ваш код работал на меня.

0 голосов
/ 22 марта 2011
 public static readonly DependencyProperty IsCheckedProperty = DependencyProperty.RegisterAttached("IsChecked", typeof(bool), typeof(...),
    new PropertyMetadata(false, delegate(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
     ...
    }

IsChecked - это bool. Вы можете отслеживать BindingExpression Ошибка в окне вывода.

0 голосов
/ 21 марта 2011

Я не могу проверить это прямо сейчас, но я уверен, что свойство зависимости IsChecked будет принимать только привязку к bool, а НЕ к Nullable<bool>.Возможно, вам придется выполнить преобразование в вашей модели представления и решить, какой из них должен быть подходящим значением по умолчанию для нулевого значения.

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