在C#和WPF中,您可以将数组元素绑定到对象属性吗?

时间:2010-10-23 04:54:11

标签: c# .net wpf data-binding mvvm

例如,是否可以将Textblock的Text属性绑定到String类型的名称[2]?

5 个答案:

答案 0 :(得分:12)

我不确定你的意思是:一个String 类型的名称[2],所以这里有两个可能的解决方案:Array1和String1。 Array1显示bow以绑定到数组的元素,String1显示如何在字符串中显示单个字符。

CODE:

 public partial class MainWindow : Window
{
    private Array array1 = new[] {"test1", "test2", "test3"};
    public Array Array1 { get { return array1; } }

    public string string1 = "string";
    public string String1 { get { return string1; } }

    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = this;
    }
}

XAML:

 <StackPanel Orientation="Vertical">
    <TextBlock Text="{Binding Array1[0]}"/>
    <TextBlock Text="{Binding Array1[2]}"/>
    <TextBlock Text="{Binding String1[0]}"/>
    <TextBlock Text="{Binding String1[1]}"/>
</StackPanel>

希望有所帮助。

答案 1 :(得分:4)

是的,你可以。以下是XAML方法。 如果要在值更改时自动更新UI,建议绑定到Observable集合。

public class DataStub
{
    public Array SomeNorthEasternStates
    {
        get
        {
            return new[] { "NH", "VT", "CT", "MA", "ME" };      
        }
    }
}

XAML:假设DataContext设置正确:

<TextBox Margin="5" Text="{Binding SomeNorthEasternStates[3], Mode=Default}"/>

答案 2 :(得分:3)

我在xaml中添加了一个按钮并订阅了“click”事件。

这是C#代码。

public partial class MainWindow : Window, INotifyPropertyChanged
{
    private Array array1 = new[] { "test1", "test2", "test3" };
    public Array Array1 { get { return array1; } }


    public string string1 = "string";
    public string String1
    {
        get { return string1; }
        set
        {
            string1 = value;
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs("String1"));
        }
    }

    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = this;

    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        String1 = DateTime.Now.ToString();
        array1.SetValue("another test", 0); 
        PropertyChanged(this, new PropertyChangedEventArgs("Array1"));
    }
}

答案 3 :(得分:1)

如果你的意思是我们可以用textBox绑定数组项,那么,是的

 <TextBox Margin="10" Text="{Binding Name[2], Mode=Default}"  Name="textBox1"/>

答案 4 :(得分:1)

改为使用ObservableCollection:

private ObservableCollection<string> _myItems = new ObservableCollection<string>(new[] { "test1", "test2", "test3" });

public ObservableCollection<string> MyItems
{
    get { return _myItems; }
    set { _myItems = value; }
}

的Xaml

    <StackPanel Orientation="Vertical">
        <TextBox Text="{Binding MyItems[0]}"/>
        <TextBox Text="{Binding MyItems[2]}"/>
        <TextBlock Text="{Binding MyItems[0]}"/>
        <TextBlock Text="{Binding MyItems[1]}"/>
    </StackPanel>