В WPF я хочу динамически установить источник элементов на основе выбора поля со списком - PullRequest
0 голосов
/ 19 января 2019

У меня есть Slider и Combobox на мой взгляд. У меня есть 2 свойства в моей модели представления. Основываясь на выборе комбинированного списка, я хочу связать любое из свойств с ползунком value.

 private int _xValue;

    public int XValue
    {
        get { return _xValue; }
        set
        {
            _xValue = value;
            NotifyPropertyChanged();
        }
    }

    private int _yValue;

    public int YValue
    {
        get { return _yValue; }
        set
        {
            _yValue = value;
            NotifyPropertyChanged();
        }
    }

 <StackPanel>
     <ComboBox SelectedIndex="0" Margin="2" Width="100">
        <ComboBoxItem Tag="X">X</ComboBoxItem>
        <ComboBoxItem Tag="Y">Y</ComboBoxItem>
    </ComboBox>

    <Slider Value="{Binding XValue}"></Slider>
</StackPanel>

Я хочу привязать ползунок value к XValue или YValue в зависимости от выбора ComboBox

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Вы можете использовать Style с DataTrigger, который связывается с SelectedItem из ComboBox:

<ComboBox x:Name="cmb" SelectedIndex="0" Margin="2" Width="100">
    <ComboBoxItem Tag="X">X</ComboBoxItem>
    <ComboBoxItem Tag="Y">Y</ComboBoxItem>
</ComboBox>

<Slider>
    <Slider.Style>
        <Style TargetType="Slider">
            <Setter Property="Value" Value="{Binding XValue}" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding SelectedItem.Tag, ElementName=cmb}" Value="Y">
                    <Setter Property="Value" Value="{Binding YValue}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Slider.Style>
</Slider>
0 голосов
/ 19 января 2019

Я не думаю, что вы можете изменить привязку динамически (по крайней мере, в XAML).Однако вы можете сделать следующее:

<StackPanel>
    <ComboBox SelectedIndex="{Binding SelectedIndex}" Margin="2" Width="100">
        <ComboBoxItem Tag="X">X</ComboBoxItem>
        <ComboBoxItem Tag="Y">Y</ComboBoxItem>
    </ComboBox>

    <Slider Value="{Binding SliderValue}"></Slider>
</StackPanel>

Slider теперь привязано к другому свойству (SliderValue).Вот дополнительные свойства в вашей модели представления:

private int _selectedIndex;
public int SelectedIndex
{
    get { return _selectedIndex; }
    set
    {
        _selectedIndex = value;
        NotifyPropertyChanged();

        if (SelectedIndex == 0)
            SliderValue = XValue;
        else if (SelectedIndex == 1)
            SliderValue = YValue;
    }
}

private int _sliderValue;
public int SliderValue
{
    get { return _sliderValue; }
    set
    {
        _sliderValue = value;
        NotifyPropertyChanged();

        if (SelectedIndex == 0)
            XValue = SliderValue;
        else if (SelectedIndex == 1)
            YValue = SliderValue;
    }
}

Идея состоит в том, что когда SelectedItem изменяется с помощью ComboBox, Slider обновляется либо XValue, либо * 1013.*.Когда значение Slider изменяется, XValue или YValue обновляется в зависимости от выбора ComboBox.

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