Свойства привязки MVVM и свойства - PullRequest
5 голосов
/ 12 мая 2011

У меня есть модель представления, которая наследуется от базового класса, который имеет свойство IsReadOnly. В этой модели представления у меня есть свойство Customer, и я связываю свойства объекта customer с элементами управления в моем представлении.

Однако я также хочу иметь возможность привязывать IsReadOnly к каждому элементу управления на мой взгляд.

<TextBox x:Name="FirstNameTextBox" Grid.Column="1" Margin="2,2,0,2" Grid.Row="2" TextWrapping="Wrap" HorizontalAlignment="Left" Width="200" 
                         Text="{Binding FirstName, Mode=TwoWay}" IsReadOnly="{Binding MyViewModel.IsReadOnly}"/>

Как я могу использовать оба эти свойства? вот моя структура

открытый класс MyViewModelBase { public bool IsReadonly {get; set;} }

открытый класс MyViewModel { публичный Клиент Клиент {получить; задавать; } } * +1010 *

открытый класс Customer { публичная строка FamilyName {get; задавать; } }

Ура за любую помощь

Ответы [ 2 ]

7 голосов
/ 12 мая 2011

Обход свойства также работает с Binding, поэтому вы можете выполнить следующие действия для привязки к свойству IsReadonly базового объекта:

public class MyViewModel {
    public Customer Customer { get; set; }
}

public class Customer : Entity {
}

public class Entity {
    public bool IsReadonly { get;set;}
}

<Button IsEnabled="{Binding Customer.IsReadonly}" />

В приведенном выше примере я предполагаю, что ваше представление связано сэкземпляр "MyViewModel", и у вас, вероятно, уже есть уведомление об изменении свойства в ваших свойствах.

0 голосов
/ 12 мая 2011

Я предполагаю, что ваш MyViewModel унаследован от MyViewModelBase.

public class MyViewModelBase { public bool IsReadonly { get;set;} }

public class MyViewModel : MyViewModelBase  { public Customer Customer { get; set; } }

public class Customer { public string FamilyName { get; set; } }

Я также предполагаю, что ваше представление DataContext является экземпляром MyViewModel, если не сообщите мне :), ваша привязка должна выглядеть следующим образом:

<TextBox x:Name="FirstNameTextBox" Grid.Column="1" Margin="2,2,0,2" Grid.Row="2"    TextWrapping="Wrap" HorizontalAlignment="Left" Width="200" 
         Text="{Binding Customer.FamilyName, Mode=TwoWay}" IsReadOnly="{Binding IsReadOnly}"/>

РЕДАКТИРОВАТЬ: если DataContext вашего TextBox является собственностью клиента, вы должны использовать RelativeSource в привязке к IsReadOnly

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