我有绑定数字到ComboBox。我想要更改值comboBox和textBox更改的值

时间:2013-04-15 18:06:28

标签: c# mvvm windows-8 combobox textbox

我希望ComboBox更改号码并更改TextBox中的值。

(例如,我的数字= 2,内容为“lblblblb”ofc。这是ObservableCollection<string>,所以我打电话给ContentWithListView[SelectNumberStep]

ReadPage.xaml

<TextBox HorizontalAlignment="Left" Margin="580,154,0,0" 
 TextWrapping="Wrap" Text="{Binding ContentWithListView[SelectNumberStep],Mode=TwoWay}"
 VerticalAlignment="Top" Width="725" Height="82"/>

<ComboBox HorizontalAlignment="Left" Margin="440,154,0,0" 
 ItemsSource="{Binding NumberStep,Mode=TwoWay}" 
 SelectedItem="{Binding SelectNumberStep,Mode=TwoWay}" 
 VerticalAlignment="Top" Width="95" Height="77" />

我如何从CombBox数字中更改TextBox中的内容?

ReadViewModel.cs

private ObservableCollection<string> contentWithListView;
public ObservableCollection<string> ContentWithListView
{
    get
    {
        return this.contentWithListView;
    }

    set
    {
        this.contentWithListView = value;
    }
}

private ObservableCollection<int> stepNumber;
public ObservableCollection<int> NumberStep
{
    get
    {
        return this.stepNumber;
    }

    set
    {
        this.stepNumber = value;
    }
}

private int selectNumberStep;
public int SelectNumberStep
{
    get
    {
        return this.selectNumberStep;
    }

    set
    {
        this.selectNumberStep = value;    
    }
}

2 个答案:

答案 0 :(得分:0)

我会更改您的视图模型代码,以便文本框绑定到标量字符串值,该值在SelectNumberStep更改时更新:

public string Content
{
   get
   { 
      // bounds checking here..
      return contentWithListView[this.SelectNumberStep];
   }
}

public int SelectNumberStep
{
    get
    {
        return this.selectNumberStep;
    }

    set
    {
        this.selectNumberStep = value;
        this.NotifyOfPropertyChange(() => this.SelectNumberStep);
        this.NotifyOfPropertyChange(() => this.Content);
    }
}

<TextBox Text="{Binding Content}" ... />

答案 1 :(得分:0)

之前的回答没有整合文本框内容必须在TwoWays中的事实,因此,在这种情况下,您可以使用INotifyPropertyChanged界面整合您的属性:

Xaml部分

<StackPanel d:DataContext="{d:DesignInstance Type=classes:StackOverFlowX }">

    <TextBox Text="{Binding Content, Mode=TwoWay}"/>

    <ComboBox ItemsSource="{Binding NumberStep, Mode=TwoWay}" 
              SelectedItem="{Binding SelectNumberStep,Mode=TwoWay}"/>

</StackPanel>

using System.ComponentModel;
using System.Runtime.CompilerServices;

public class StackOverFlowX : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public StackOverFlowX()
    {

    }

    private ObservableCollection<string> contentWithListView;
    public ObservableCollection<string> ContentWithListView
    {
        get
        {
            return this.contentWithListView;
        }

        set
        {
            this.contentWithListView = value;
            OnPropertyChanged();
        }
    }

    private ObservableCollection<int> stepNumber;
    public ObservableCollection<int> NumberStep
    {
        get
        {
            return this.stepNumber;
        }
        set
        {
            this.stepNumber = value;
            OnPropertyChanged();
        }
    }

    private int selectNumberStep;
    public int SelectNumberStep
    {
        get
        {
            return this.selectNumberStep;
        }
        set
        {
            this.selectNumberStep = value;
            OnPropertyChanged();
            OnPropertyChanged("Content");
        }
    }

    private string _content;
    public string Content
    {
        get
        {
            return contentWithListView[this.SelectNumberStep];
        }
        set
        {
            this._content = value;

            if (contentWithListView.IndexOf(value) > -1)
            {
                SelectNumberStep = contentWithListView.IndexOf(value);
                OnPropertyChanged("SelectNumberStep");
            }

            OnPropertyChanged();

        }
    }

    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        var eventHandler = this.PropertyChanged;
        if (eventHandler != null)
        {
            eventHandler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

}