数据绑定WPF XAML

时间:2013-10-21 13:18:59

标签: c# wpf xaml

您好我是WPF新手,我不知道如何进行数据绑定和后面的代码,以启用和禁用我的文本框和按钮。

如果您可以告诉我如何让它在下面的示例中工作,它将帮助我完成我的项目。

XAML

<ComboBox Name="ComboBoxA"                  
          Margin="5"  
          SelectedIndex="0" SelectionChanged="ComboBoxA_SelectionChanged"  >
    <ComboBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel Orientation="Vertical" Height="Auto" Margin="5" />
        </ItemsPanelTemplate>
    </ComboBox.ItemsPanel>
    <ComboBoxItem Content="Option1" Width="72"  />
    <ComboBoxItem Content="Option2" Width="72" />
    <ComboBoxItem Content="Option3" Width="72" />
</ComboBox>

<TextBox Name="TextBoxA"
         Margin="5" 
         Width="200"   
         IsEnabled="{Binding TextBoxEnabled}" />

<Button Name="ButtonA"
        Content="Next" 
        HorizontalAlignment="left"                
        Margin="5"                 
        IsEnabled="{Binding ButtonEnabled} />

C#

private void ComboBoxA_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    TextBoxA = new TextBox();
    ButtonA = new Button();

    if (ComboBoxAfterProcessing.SelectedIndex == 0)
    {                    
        TextBoxA.IsEnabled = false;                    
        ButtonA.IsEnabled = false;
    }
    else if (ComboBoxAfterProcessing.SelectedIndex == 1)
    {                   
        TextBoxA.IsEnabled = true;
        ButtonA.IsEnabled = true;
    }
    else if (ComboBoxAfterProcessing.SelectedIndex == 2)
    {
        TextBoxA.IsEnabled = true;
        ButtonA.IsEnabled = true;
    }
}

2 个答案:

答案 0 :(得分:0)

您可以将文本框和按钮的IsEnabe属性绑定到Combox的SelectedIndex 属性,您无需响应ComboBoxA_SelectionChanged事件。为了让 SelectedIndex更改您的按钮和textBox的IsEnabe,您需要在绑定中使用对流器 例如:

答案 1 :(得分:0)

  1. 写一个如下所示的类,如下所示

    public class ViewMole:INotifyPropertyChanged
    {
    public ViewMole()
    {
        ListValues = new List<string>() { "Option1", "Option2", "Option3", "Option4", 
                                           "Option5" };
    }
    public ICommand Click
    {
        get
        {
            return new RelayCommand();
        }
    }
    public List<string> ListValues
    {
        get;
        set;
    }
    string a;
    public string A
    {
        get
        {
            return a;
        }
        set
        {
            a = value;
            RaisePropertyChanged("A");
        }
    }
    int index=0;
    public int SelectedIndex
    {
        get
        {
            return index;
        }
        set
        {
            index = value;
            RaisePropertyChanged("SelectedIndex");
            A = ListValues[index];
            if (index == 0)
            {
                IsEnabled = false;
            }
            else
            {
                IsEnabled = true;
            }
        }
    }
    bool isEnabled;
    public bool IsEnabled
    {
        get
        {
            return isEnabled;
        }
        set
        {
            isEnabled = value;
            RaisePropertyChanged("IsEnabled");
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    private void RaisePropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    

    }

  2. 编写另一个实现ICommand的类,如下所示。这是handel按钮点击事件

         public class RelayCommand : ICommand
        {
        public bool CanExecute(object parameter)
        {
            return true;
        }
    
        public event EventHandler CanExecuteChanged;
    
        public void Execute(object parameter)
        {
            MessageBox.Show("Button cliked");
        }
    }
    

    将您的Xaml更改为

        <ComboBox Name="ComboBoxA"  SelectedIndex="{Binding SelectedIndex, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding ListValues}"/>
    
        <TextBox Name="TextBoxA"  Margin="5"    Width="200"   Text="{Binding A}" IsEnabled="{Binding IsEnabled}"/>
    
        <Button Name="ButtonA"   Content="Next"   HorizontalAlignment="left" Margin="5"    Command="{Binding Click}" IsEnabled="{Binding IsEnabled}"/>
    

    在Xmal.cs中将数据Context设置为beolw

        public MainWindow()
        {
            InitializeComponent();
            DataContext = new ViewMole();
    
        }
    

    请参阅以下链接,了解为何必须使用INotifyPropertyChanged和ICommand http://wpftutorial.net/INotifyPropertyChanged.html http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx http://msdn.microsoft.com/en-us/library/system.windows.input.icommand.aspx