2012-07-05 5 views
0

Я хочу связать текстовое поле, но оно не отображает строку. Во-вторых, я хочу периодически обновлять строку Name. Любое решение?WPF простая привязка данных

вот мой C# код:

public partial class Window1 : Window 
{ 
    public String Name = "text"; 
} 

XAML код:

<Grid Name="myGrid" Height="300"> 
    <TextBox Text="{Binding Path=Name}"/> 
</Grid> 

ответ

3
public partial class MainWindow : Window,INotifyPropertyChanged 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = this; 
    } 
    private string _name; 
    public string Name 
    { 
     get 
     { 
      return _name; 
     } 
     set 
     { 
      _name = value; 
      NotifyCahnge("Name"); 

     } 

    } 

    private void NotifyChange(string prop) 
    { 
     if(PropertyChanged!=null) 
      PropertyChanged(this,new PropertyChangedEventArgs(prop)); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

Надеется, что это поможет

1

Вы должны определить ваш Name как DependencyProperty:

public string Name 
{ 
    get { return (string)GetValue(NameProperty); } 
    set { SetValue(NameProperty, value); } 
} 

public static readonly DependencyProperty NameProperty = 
    DependencyProperty.Register("Name", typeof(string), typeof(Window1)); 

(Обратите внимание, что Visual Studio определяет удобный сниппет propdp для этого, попробуйте ввести propdp + TAB + TAB.)

Затем вам нужно правильно связать. Что-то в этом роде:

<TextBox Text="{Binding Name, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"/> 
+0

вы можете быть более конкретным? – hellzone

+0

Ему нужно начать с изменения его из поля, WPF не привязывается к свойствам поля. – MBen

+0

@MBen: OP должен выбрать изменения, поэтому ему нужно либо DependencyProperty, либо INotifyPropertyChanged – Vlad

2

Вам нужно delcare Properties, а не поле, то, что вы сделали delcared, это поле.

public String Name {get; set;} 

Плюс он не должен находиться в файле управления (файл UI). Переместите его в отдельный класс и установите его как DataContext.

PLUS as Vlad указал, что вам необходимо сообщить в пользовательский интерфейс, что все меняется, простые свойства не имеют этого.

Хорошая статья на dataBinding:

+0

Это не сработает, OP необходимо изменить переменную и внести эти изменения в пользовательский интерфейс. – Vlad

+0

Конечно. Но у него долгий путь, я предлагаю прочитать некоторые основы о DataBinding – MBen

1

WPF привязки работать с свойствами, а не поле. Вам нужно определить Name как свойство, а также установить контекст данных окна:

public partial class Window1 : Window 
{ 
    public String Name { get; set; } 

    public Window1() 
    { 
     Name = "text"; 
     DataContext = this; 

     InitializeComponent(); 
    } 
} 

Вы также можете определить его как свойства зависимостей, если вы хотите поддерживать уведомления об изменении и другие DP-функции, связанные или использовать INotifyPropertyChanged. Я предлагаю вам больше узнать о привязке данных WPF here.

Смежные вопросы