В C# и WPF можно ли привязать элемент массива к свойству objects?
например, можно ли привязать текстовое свойство Textblock к имени элемента [2] типа String?
5 ответов
Я не уверен, что вы имеете в виду, говоря:имя элемента[2] типа String, поэтому вот два возможных решения вашей проблемы: Array1 и String1. Array1 показывает лук для привязки к элементу массива, а String1 показывает, как отображать один символ в строке.
код:
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>
надеюсь, что это поможет.
Да, вы можете. Ниже приведен подход XAML. Рекомендуется привязку к наблюдаемой коллекции, если вы хотите обновить UI автоматически при изменении значения.
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}"/>
Я добавил кнопку в 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"));
}
}
Если вы имеете в виду, что если мы можем связать элемент массива с textBox, то да
<TextBox Margin="10" Text="{Binding Name[2], Mode=Default}" Name="textBox1"/>
вместо этого используйте 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>