В WPF можно ли привязать к свойству свойства в моем DataContext? - PullRequest
0 голосов
/ 24 марта 2011

Мне нужно связать 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>

Заранее благодарим за любую помощь, которую вы можете предоставить.

1 Ответ

5 голосов
/ 24 марта 2011

{Binding Path=ServerInstance.Name} должно работать, конечно, чтобы увидеть значение изменения имени, даже если ServerInstance должен быть INotifyPropertyChanged.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...