2011-02-09 3 views
0

hi Я новичок в silverlight 4. У меня есть два переключателя в моих представлениях по имени Внутренний и Внешний в stackpanel1, которые привязаны к моей модели представления. в stackpanel2 у меня есть текстовый блок и кнопка. теперь то, что мне нужно, когда я выбираю внутреннюю кнопку сокета-переключателя, должен быть видимым и на внешнем выделенном стеке packpanel2 должен быть невидимым. так как я связываю свойство видимости stackpanel2 с моей моделью просмотра. pls решат проблему ma как можно скорее.Как связать свойство видимости панели стека

+0

FYI: «как можно скорее» считается грубым здесь, в SO. Это означает, что в вашей оценке ваш вопрос более важен, чем другие. – AnthonyWJones

ответ

0

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

Вы можете узнать, как построить конвертер здесь. http://weblogs.asp.net/dwahlin/archive/2009/08/15/so-what-s-a-silverlight-value-converter-anyway.aspx

+0

Я не получил u.Can u сделаю мне одолжение.Pls Покажите кодировку Convertor, xzml и viewmodel. – anuj

+0

@anuj: текстовое ограничение на комментарии составляет 600 символов. Это не твиттер или SMS. Использование сокращений, таких как «u», а не «вас», не рекомендуется. – AnthonyWJones

1

@ Анчжу нет-проблем, вы должны добавить новый класс наследует его IValueConverter это будет ваш BOOL для видимости преобразователя, теперь у вас на Bind StackPanel Visibility свойства с Логическим свойством из вашей модели представления, как это:

<UserControl 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:GreenScreenApp.classes" x:Class="GreenScreenApp.one" > 
<UserControl.Resources> 
    <local:VisibilityConverter x:Key="BoolToVisibilityConverter"/> 
</UserControl.Resources> 
<Grid DataContext="MyDataSource" x:Name="LayoutRoot" > 
    <StackPanel x:Name="stackpanel2" Visibility="{Binding IsVisible, Converter={StaticResource BoolToVisibilityConverter}}"> 
    </StackPanel> 
</Grid> 

вы должны иметь свойство с именем "IsVisible" в контексте данных. Конвертер преобразует значения логической и обратной видимости.

конвертер Код

public class VisibilityConverter : IValueConverter 
{ 

    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var v = value; 

     if (v == "true") 
      return "Visible"; 
     else 
      return "Collapsed"; 

    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

просто хочу, чтобы вы знаете, в моем случае преобразователь класс находится в папке «классов» в корне проекта. Надеюсь, что это решит вашу проблему.

+0

ya it did.thanks много – anuj