2014-02-16 3 views
1

Я схожу с ума от этой ошибки, поэтому мне действительно нужна помощь.Другое свойство MVVM Visibility, которое не обновляется

При обнаружении исключения я должен показать «окно сообщения» (с использованием сетки), которое содержит сетку, но после явной установки контекста данных в сетку все же он не показывает мне сообщение коробка.

код XAML:

<Grid x:Name="gridBackground" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="1" Visibility="{Binding BackgroundVisibility}" Background="#FFB4B4B4" Opacity="0.7"></Grid> 

<Grid x:Name="gridWarningMessages" HorizontalAlignment="Center" VerticalAlignment="Center" MinWidth="500" MinHeight="200" MaxWidth="600" MaxHeight="600" Visibility="{Binding WarningMessagesVisibility}"> 
    <TextBlock HorizontalAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Center" Foreground="Black" Margin="50" FontSize="29.333" TextAlignment="Center" x:Name="txtWarningMessages" Text="{Binding WarningOrErrorMessage}" FontFamily="Assets/helvetica-neue-thin-1361522098.ttf#HelveticaNeue"></TextBlock> 
</Grid> 

ViewModel свойства:

private string warningOrErrorMessage; 
    public string WarningOrErrorMessage 
    { 
     get { return warningOrErrorMessage; } 
     set 
     { 
      if (warningOrErrorMessage != value) 
      { 
       warningOrErrorMessage = value; 
       Notify("WarningOrErrorMessage"); 
      } 
     } 
    } 

    private Visibility warningMessagesVisibility; 
    public Visibility WarningMessagesVisibility 
    { 
     get { return warningMessagesVisibility; } 
     set 
     { 
      if (warningMessagesVisibility != value) 
      { 
       warningMessagesVisibility = value; 
       Notify("WarningMessagesVisibility"); 
      } 
     } 
    } 

    private Visibility backgroundVisibility; 
    public Visibility BackgroundVisibility 
    { 
     get { return backgroundVisibility; } 
     set 
     { 
      if (backgroundVisibility != value) 
      { 
       backgroundVisibility = value; 
       Notify("BackgroundVisibility"); 
      } 
     } 
    } 

Код, который явно задает DataContext к сетке, и 'шкуры' их при инициализации страницы:

var context = (SubmittedOrdersViewModel)DataContext; 
gridWarningMessages.DataContext = context; 
gridBackground.DataContext = context; 
context.BackgroundVisibility = Visibility.Collapsed; 
context.WarningMessagesVisibility = Visibility.Collapsed; 

Код (в режиме просмотра, через ICommand ..), который должен отображать сетку после выхода ption ловится (обратите внимание закомментированный «Notify» строку, я попытался явно стреляя Уведомлять после установки значения на собственности, но по-прежнему имеет те же проблемы):

private void deleteSelectedOrder(object param) 
    { 
     try 
     { 
      throw new Exception(""); 

      //working code to delete the order goes here 
     } 
     catch (Exception) 
     { 
      WarningOrErrorMessage = "An error occurred while trying to delete this order."; 
      Notify("WarningOrErrorMessage"); 

      BackgroundVisibility = Visibility.Visible; 
      //Notify("BackgroundVisibility"); 

      WarningMessagesVisibility = Visibility.Visible; 
      //Notify("WarningMessagesVisibility"); 
     } 
    } 

Пожалуйста, пожалуйста, помогите мне. :(Спасибо

+1

Вместо привязки к переменной видимости, связывание с логическим, тогда использование конвертера видимости boolean – Shoe

+1

не может реплицировать проблему. Здесь ваш код работает нормально (тестируется с кодом как DataContext вместо 'SubmittedOrdersViewModel'). и явно установка DataContext для обеих сеток кажется бесполезным, по умолчанию должен был унаследовать родительский DataContext. – har07

+0

необходимо проверить, является ли обязательным, либо поставлять некоторый dummyconverter для отладки, либо отлаживать get {} вашего свойства после вызова Notify или использовать Snoop и проверять любые ошибки привязки. –

ответ

0

Я просто нашел, что есть кусок кода, который явно задает свойство видимости непосредственно на свойствах элемента управления при инициализации страницы:

gridWarningMessages.Visibility = Visibility.Collapsed; 
gridBackground.Visibility = Visibility.Collapsed; 

Так что я удалил этот код и заменить с изменением ViewModel переплете свойство вместо:..

context.BackgroundVisibility = Visibility.Collapsed; 
context.WarningMessagesVisibility = Visibility.Collapsed; 

Он сейчас работает

Прокоментируй, эксперты WPF вы столкнулись с таким СКЭНАРОМ ios, который явно устанавливает значение в свойстве элемента управления вместо свойства viewmodel, испортил код?

Спасибо в любом случае тем, кто потратил время на просмотр моего кода.

Смежные вопросы