Как сделать TextBox доступным только для чтения на основе элемента, выбранного в ComboBox? - PullRequest
0 голосов
/ 07 ноября 2018

Я был бы очень рад, если бы вы могли помочь мне, спасибо!

ЗДЕСЬ XAML

<ComboBox Margin="8" Name="cmbox" SelectionChanged="cmbox_SelectionChanged" >
    <ComboBoxItem IsSelected="True">ESCALONADO</ComboBoxItem>
    <ComboBoxItem>INTEGRAL</ComboBoxItem>
</ComboBox>
<TextBox IsReadOnly="{Binding Testcmb}" Grid.Column="1" Margin="8"/>

ЗДЕСЬ НЕМНОГО КОДА позади

Я попытался приписать значение свойства Testcmb на основе выбранного элемента в выпадающем списке, а затем сделать привязку к текстовому полю, чтобы превратить его в IsReadOnly = "true". Прав ли синтаксис?

private void cmbox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if(cmbox.SelectedIndex > 0)
    {
        (Object).Testcmb = true;
    }
    else
    {
        (Object).Testcmb = false;
    }
}

private bool _testcmb;     
public bool Testcmb
{   
    get { return _testcmb; }
    set
    {
        if (this._testcmb != value)
        {
            this._testcmb = value;
            this.NotifyPropertyChanged("Testcmb");
        };
    }
}

public event PropertyChangedEventHandler PropertyChanged;

public void NotifyPropertyChanged(string propName)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(propName));
    }
}

1 Ответ

0 голосов
/ 07 ноября 2018

Добро пожаловать в StackOverflow. Ваш синтаксис действительно верен, однако вы смешиваете привязку данных с обработчиками событий и все это в выделенном коде представления.

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

<ComboBox x:Name="cbox">
    <ComboBoxItem IsSelected="True" Content="ESCALONADO"/>
    <ComboBoxItem Content="INTEGRAL" />
</ComboBox>
<TextBox Text="Some text...">
    <TextBox.Style>
        <Style TargetType="TextBox">
            <Setter Property="IsReadOnly" Value="True" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding SelectedIndex, ElementName=cbox}" Value="0">
                    <Setter Property="IsReadOnly" Value="False" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...