Сделать флажки из значения int в C # (для silverlight) - PullRequest
0 голосов
/ 14 января 2011

Я хочу прочитать анализируемое значение int из ползунка silverlight, чтобы установить флажки.

Например, ползунок имеет значение 7, я нажму кнопку и поставлю 7 флажков.

Как мне это сделать?

Ответы [ 3 ]

1 голос
/ 14 января 2011

Если вам нужно захватить их значения в модели представления, добавление флажков в выделенном фрагменте кода может быть не лучшим подходом.

class MainWindowViewModel : INotifyPropertyChanged
{
    private int _sliderValue;
    public int SliderValue
    {
        get
        {
            return _sliderValue;
        }
        set
        {
            _sliderValue = value;

            while ( SliderValue > CheckboxValues.Count )
            {
                CheckboxValues.Add( false );
            }

            // remove bools from the CheckboxValues while SliderValue < CheckboxValues.Count
            // ...
        }
    }


    private ObservableCollection<Boolean> _checkboxValues = new ObservableCollection<Boolean>();
    public ObservableCollection<Boolean> CheckboxValues
    {
        get
        {
            return _checkboxValues;
        }
        set
        {
            if ( _checkboxValues != value )
            {
                _checkboxValues = value;
                RaisePropertyChanged( "CheckboxValues" );
            }
        }
    }

, тогда в xaml, что-то вроде:

 <ItemsControl ItemsSource="{Binding CheckboxValues}">
        <ItemsControl.ItemTemplate>
            <DataTemplate DataType="{x:Type sys:Boolean}">
                <CheckBox IsChecked="{Binding self}">Hello World</CheckBox>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
0 голосов
/ 14 января 2011

Вот рабочий пример.Он даже запоминает проверенное состояние блоков при добавлении новых.

Предполагая, что это XAML:

<Slider Minimum="0" Maximum="7" SmallChange="1" LargeChange="1"
        x:Name="mySlider" ValueChanged="mySlider_ValueChanged" />

<StackPanel x:Name="chkContainer" />

Это обработчик событий

private void mySlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    if (chkContainer != null) // It could be null during page creation (add event handler after construction to avoid this)
    {
        // The following works because the both the small and large change are one
        // If they were larger you may have to add (or remove) more at a time
        if (chkContainer.Children.Count() < mySlider.Value)
        {
            chkContainer.Children.Add(new CheckBox { Content = mySlider.Value.ToString() });
        }
        else
        {
            chkContainer.Children.RemoveAt(int.Parse(mySlider.Value.ToString()));
        }
    }
}
0 голосов
/ 14 января 2011

Можно установить флажок и добавить его на страницу проекта по умолчанию со следующим кодом.

        var cb = new CheckBox();
        ContentPanel.Children.Add(cb);
...