Мне нужно связать TextBox's Text со свойством класса, которое само является свойством моего DataContext.Так, например, если у меня есть класс с именем ServerInstance, и у него есть строковое свойство с именем Name.Я показываю ServerInstance как свойство SelectedInstance в моем коде позади (viewmodel в этом случае).Мой вопрос заключается в том, как я могу связать TextBox со свойством Name свойства SelectedInstance?
Вот мой ViewModel / Code:
public class ViewModel : Notifier
{
private MobileServerInstance m_instance = null;
private RelayCommand m_addCommand = null;
private RelayCommand m_clearCommand = null;
public MobileServerInstance ServerInstance
{
get { return m_instance; }
set { m_instance = value; OnPropertyChanged("ServerInstance"); }
}
public ICommand AddCommand
{
get
{
if (m_addCommand == null)
{
m_addCommand = new RelayCommand(parameter=>Add(parameter), parameter=>CanAdd(parameter));
}
return m_addCommand;
}
}
public ICommand ClearCommand
{
get
{
if (m_clearCommand == null)
{
m_clearCommand = new RelayCommand(parameter => Clear(parameter), parameter => CanClear(parameter));
}
return m_clearCommand;
}
}
private bool CanClear(object parameter)
{
return m_instance != null;
}
private void Clear(object parameter)
{
m_instance = null;
}
private bool CanAdd(object parameter)
{
return m_instance == null;
}
private void Add(object parameter)
{
m_instance = new MobileServerInstance();
}
}
Notifier - это базовый класс, который реализует INotifyPropertyChangedинтерфейс и предоставляет защищенный метод OnPropertyChanged, который вызывает событие PropertyChange - типичный шаблон там.
Вот мой простой класс, который я использую для DataContext:
public class MobileServerInstance : Notifier
{
private string m_name = "Name";
private string m_alias = "Alias";
public string Name
{
get { return m_name; }
set { m_name = value; OnPropertyChanged("Name"); }
}
public string Alias
{
get { return m_alias; }
set { m_alias = value; OnPropertyChanged("Alias"); }
}
}
И, наконец, мой xaml (этоэто POC, поэтому пользовательский интерфейс очень прост):
<Window x:Class="WpfApplication4.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:WpfApplication4"
Title="Window1" Height="300" Width="500">
<Window.DataContext>
<src:ViewModel />
</Window.DataContext>
<StackPanel>
<StackPanel Orientation="Horizontal">
<Label Content="Name:" Margin="0 0 2 0" />
<ComboBox Margin="0 0 8 0" Width="125" />
<Button Margin="0 0 4 0" Content="Add" Command="{Binding AddCommand}" Width="75" />
<Button Content="Clear" Command="{Binding ClearCommand}" Width="75" />
</StackPanel>
<StackPanel Margin="20 5 20 5"">
<StackPanel Orientation="Horizontal">
<Label Width="40" Content="Name:" Margin="0 0 2 0" />
<TextBox Width="250" Text="{Binding ServerInstance.Name}" />
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0 5 0 0">
<Label Width="40" Content="Alias:" Margin="0 0 2 0" />
<TextBox Width="250" Text="{Binding ServerInstance.Alias}" />
</StackPanel>
</StackPanel>
</StackPanel>
</Window>
Заранее благодарим за любую помощь, которую вы можете предоставить.