For example, is it possible to bind a Textblock's Text property to an element Name[2] of type String?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
I'm not sure what you mean exactly by saying:an element Name[2] of type String, so here are two possible solutions to your problem: Array1 and String1. Array1 show bow to bind to element of an array and String1 shows how to display one single character in a string.
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>
Hope that helps.
回答2:
Yes you can. Following is the XAML approach. It is advisable to bind to an Observable collection if you want to update the UI automatically when the value changes.
public class DataStub
{
public Array SomeNorthEasternStates
{
get
{
return new[] { "NH", "VT", "CT", "MA", "ME" };
}
}
}
XAML: Assuming the DataContext is set correctly:
<TextBox Margin="5" Text="{Binding SomeNorthEasternStates[3], Mode=Default}"/>
回答3:
I've added a button in xaml and subscribed "click" event.
Here is C# code.
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"));
}
}
回答4:
if you mean that if we can bind array item with textBox then, yes
<TextBox Margin="10" Text="{Binding Name[2], Mode=Default}" Name="textBox1"/>
回答5:
Use ObservableCollection instead:
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>