2010-10-23 26 views

Odpowiedz

12

Nie jestem pewien, co dokładnie masz na myśli mówiąc: elementem Nazwa [2] typu String, więc tutaj są dwa możliwe rozwiązania twojego problemu: Array1 i String1. Array1 pokazuje łuk, aby powiązać element tablicy, a String1 pokazuje jak wyświetlić jeden znak w ciągu.

KOD:

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> 

nadzieję, że pomoże.

+0

Dzięki to działa, ale aktualizacja źródła nie aktualizuje kontrolki docelowej. Próbowałem wszystkiego i to nie działa tak daleko. Czy powinienem używać ObservableCollection? – Scifiballer24

+0

Ponieważ ten komentarz nie pozwala, wysłałem kolejną odpowiedź. –

1

jeśli oznacza to, że jeśli możemy powiązać element tablicy z pola tekstowego, a następnie, tak

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

TextBox nie ma właściwości Content. –

+0

Przepraszam ... to mój błąd, dziękuję – Azhar

4

Tak można. Poniżej przedstawiono podejście XAML. Wskazane jest powiązanie z kolekcją Observable, jeśli chcesz zaktualizować interfejs automatycznie po zmianie wartości.

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

XAML: Zakładając DataContext jest ustawiony prawidłowo:

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

Czy istnieje szczególny powód, dla którego używasz metod z klasy 'Array' zamiast po prostu' var testArray = new string [5]; testarray [0] = "NY"; ... '. – Heinzi

+1

@Heinzi - Lub var testArray = new [] {"NH", "VT", "CT", "MA", "ME"}; (NY i NJ nie są w Nowej Anglii) :) –

+0

@ John Bowen. Mój błąd. Zmieniono nazwę. – SKG

3

Dodałem przycisk w Xaml i zasubskrybowane zdarzenie "kliknij".

Oto kod 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")); 
    } 
} 
+0

Dzięki. ObservableCollection implementuje te funkcje i działa doskonale. Doceniam twoją pomoc klm_. – Scifiballer24

1

Zastosowanie ObservableCollection zamiast:

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> 
Powiązane problemy