WPF绑定到已绑定的属性

时间:2014-03-15 22:35:58

标签: c# wpf xaml data-binding

如果我想绑定一些已绑定到其他内容的属性,我该怎么办?

就我而言,我有一个带有TextBox的窗口。此TextBox的Text属性是绑定到它的selectedItem的组合框的数据。我的Window类有一个公共字符串属性,我想用TextBox中的任何值更新,所以我想用Text属性绑定数据,但正如我所说,它已经绑定了。

如何使用TextBox中的文本更新我的属性?它必须使用TextChanged的路由事件,还是可以通过Xaml进行?

还特别针对属性,你自己在window.cs中定义它们......如何将它们绑定到TextBox.Text?我尝试使用<Window>声明来执行此操作,这意味着<Window MyProperty={Binding ...} />但该属性在此处未被识别。为什么以及如何做?

1 个答案:

答案 0 :(得分:2)

您可以使用MVVM模式轻松解决此问题。

视图模型:

public class ChooseCategoryViewModel : ViewModelBase
{
    private string[] _categories =
        { "Fruit", "Meat", "Vegetable", "Cereal" };

    public string[] Categories
    {
        get { return _categories; }
    }

    private string _selectedCategory;
    public string SelectedCategory
    {
        get { return _selectedCategory; }
        set
        {
            _selectedCategory = value;
            OnPropertyChanged("SelectedCategory");
                            if (value != null && CategoryName != value)
                                CategoryName = value;
        }
    }

    private string _categoryName;
    public string CategoryName
    {
        get { return _categoryName; }
        set
        {
            _categoryName = value;
            OnPropertyChanged("CategoryName");
            if (Categories.Contains(value))
            {
                SelectedCategory = value;
            }
            else
            {
                SelectedCategory = null;
            }
        }
    }
}

XAML:

<ComboBox ItemsSource="{Binding Categories}"
          SelectedItem="{Binding SelectedCategory}" /> 
<TextBox Text="{Binding CategoryName}" />