Текст текстового поля на основе элемента ComboBox в WPF - PullRequest
1 голос
/ 10 февраля 2011

У меня есть Combobox в моем приложении, в котором Comboboxitems "Да" и "Нет" Я хочу назначить текст моего текстового поля как «очищенный», если выбран «Comboboxitem yes» и «не очищен», если выбран «Comboboxitem« No », как мне сделать это в WPF

Ответы [ 3 ]

1 голос
/ 10 февраля 2011

Создание реализации IValueConverter

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Data;

namespace XAMLConverter
{
    public class ComboBoxConverter : IValueConverter
    {


        object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            try
            {                
                if (value.ToString() == "Yes")
                    return "Cleared";
                else if (value.ToString() == "No")
                    return "Not Cleared";
                else
                    return "";

            }
            catch
            {
                return "";
            }
        }

        object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

Добавьте свое пространство имен в XAML для:

xmlns:conv="clr-namespace:XAMLConverter"

Добавьте ресурс для конвертера:

<Window.Resources>        
    <conv:ComboBoxConverter x:Key="ComboBoxConverter" />        
</Window.Resources>

Затем добавьте свои элементы управления:

    <StackPanel>
        <ComboBox Name="SelectControl">
            <ComboBoxItem Content="Yes" />
            <ComboBoxItem Content="No" />
        </ComboBox>

        <TextBox Text="{Binding ElementName=SelectControl, 
                                Path=SelectedItem.Content, 
                                Converter={StaticResource ComboBoxConverter}}" 
        />

    </StackPanel>
1 голос
/ 10 февраля 2011

Триггерное решение находится здесь:

        <ComboBox Name="cb">
            <ComboBoxItem>Yes</ComboBoxItem>
            <ComboBoxItem>No</ComboBoxItem>
        </ComboBox>
        <TextBox>
            <TextBox.Style>
                <Style TargetType="TextBox">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=cb, Path=SelectedItem.Content}" Value="Yes">
                            <Setter Property="Text" Value="cleared"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ElementName=cb, Path=SelectedItem.Content}" Value="No">
                            <Setter Property="Text" Value="not cleared"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBox.Style>
        </TextBox>
1 голос
/ 10 февраля 2011

Если вы хотите сделать это полностью в XAML, вы можете использовать привязку элемента в TextBox (для флажка / комбинированного списка), а затем реализовать преобразователь значения для преобразования Да / Нет для соответствующей строки.

В качестве альтернативы, если вы используете MVVM, вы можете привязать флажок IsChecked или выпадающий список SelectedValue к свойству в вашей модели представления и в этом установщике свойств уведомить другое свойство, которое представляет собой текст вашего текстового поля, который имеет только getter, который возвращает соответствующую строку на основе вашего первого свойства модели представления. Свяжите свойство TextBox Text с этим новым свойством модели представления.

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