SilverLight
От: Аноним  
Дата: 14.04.09 14:06
Оценка:
Добрый день!
...Есть приложение на SilverLight в нем куча элементов ввода, кнопок и т.д.
...Необходимо в зависимости от неких условий управлять доступностью , тех или инных контролов. Так вот хочеться совета как лучше сделать ?

..Напрямую устанавливать свойства isEnabled и.т.д не очень удобно, очень тяжело отслеживать в процессе разработки , какие контролы добавляються , удаляються
(уж вечно дизайнерам хочеться что то добавить , а что то убить)
и.т.д
хотя можно ! ...В SL3 есть всязки Trigger и.т.д но сейчас приложение на SL2..
2.использовать DependencyProperty и забиндить у контрола isEnabled на данное например свойство .
3. ну наверника есть более красивый способ ?
Re: SilverLight
От: Пельмешко Россия blog
Дата: 14.04.09 14:17
Оценка:
Здравствуйте, Аноним, Вы писали:
А>3. ну наверника есть более красивый способ ?

Мне кажется Вам надо копасть в сторону MVVM, ICommand, CanExecute...
Re: SilverLight
От: Shota  
Дата: 14.04.09 14:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>2.использовать DependencyProperty и забиндить у контрола isEnabled на данное например свойство .


Да, самое правильное решение — использовать биндинг и DataContext. Вот пример:

page.aspx
<UserControl x:Class="SLTest.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300">
    <Grid x:Name="LayoutRoot" Background="White">
        <Button Content="Test" IsEnabled="{Binding Path=Enabled}"/>
    </Grid>
</UserControl>


Model.cs:

public class Model : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private bool enabled = true;
        public bool Enabled
        {
            get { return enabled; }
            set
            {
                enabled = value;
                Fire("Enabled");
            }
        }

        internal void Fire(string propName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propName));
            }
        }

    }


ну и одна строчка в Page.xaml.cs:

public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
            this.DataContext = new Model();
        }
    }


Изменение в модели автоматически скажутся на состоянии кнопки, полная декларативность
Re[2]: SilverLight
От: Ra2005  
Дата: 14.04.09 15:09
Оценка:
Попробовал в первом приближенииб это то что нужно, Спасибо! (сам склонялся к некой вариации типа такого решения),
Просто и доступно получается, единственное не очень нравиться использовать DataContext (так как оно у меня в некоторых местах используеться по другому
Re[3]: SilverLight
От: Shota  
Дата: 14.04.09 15:46
Оценка:
Здравствуйте, Ra2005, Вы писали:

R>Просто и доступно получается, единственное не очень нравиться использовать DataContext (так как оно у меня в некоторых местах используеться по другому


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