изменить свойство управления, когда что-то происходит - wpf xaml - PullRequest
1 голос
/ 25 ноября 2011

У меня есть кнопка меню, которая открывает окно при нажатии.

Я хочу изменить его цвет при щелчке и вернуть его при закрытии окна.

Я думал использовать триггеризменить его цвет при щелчке, но как я могу узнать, когда окно было закрыто, чтобы изменить цвет обратно?

мне это нужно в mvvm, поэтому я предпочитаю не использовать код позади

Ответы [ 5 ]

2 голосов
/ 25 ноября 2011

Одним из шаблонов, которые идут рука об руку с моделью представления, является агрегатор событий.Основная суть заключается в том, что вы создаете шину сообщений, которая позволяет заинтересованным объектам подписываться на определенные события, которые могут запускать другие объекты, не требуя прямой связи между ними.

Модель основного представления может подписаться на событие WindowClosed (это обеспечивает идентификатор для определения, какое конкретное окно закрылось).Когда ваш диалог закрыт, его модель представления будет отвечать за запуск события.

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

1 голос
/ 25 ноября 2011

Я предполагаю, что вы создаете экземпляр, а второе окно из ViewModel связано со свойством кнопки Command. Обычно это будет то, как эта ситуация будет обрабатываться в MVVM. Это позволяет вам создать другое свойство в вашей ViewModel, которое запрашивает, открыто ли окно или нет.

private Window _secondWindow = null;
public bool SecondWindowIsOpen
{
  get { return _secondWindow != null; }
}

Затем в своем XAML вы можете привязать BackgroundColor кнопки к этому свойству и использовать триггеры для определения цвета.

<Window.Resources>
  <Style x:Key="WindowIsOpenButtonStyle" TargetType="{x:Type Button}">
    <Style.Triggers>
      <DataTrigger Binding="{Binding SecondWindowIsOpen}" Value="True">
        <Setter Property="Background" Value="Green" />                    
      </DataTrigger> 
    </Style.Triggers>
  </Style>
</Window.Resources>

<Grid>
  <Button Background="Yellow" Command="{Binding OpenSecondWindow}" Style="{StaticResource WindowIsOpenButtonStyle}" />
</Grid>

Теперь, когда окно открыто, цвет фона кнопки изменится на Желтый, а когда он снова закроется, он вернется к своему первоначальному цвету.

1 голос
/ 25 ноября 2011

если вы используете mvvm, то, надеюсь, вы используете IWindowService, чтобы открыть ваше окно.если вы это сделаете, ваша модель представления узнает, когда служба / окно закроется, и вы можете использовать логическое значение для привязки к вашему триггеру.

0 голосов
/ 25 ноября 2011

Вы можете подписаться на событие Closed вашего окна, и в этом случае вы можете установить любое свое свойство bool, например, -

private void Border_MouseEnter(object sender, MouseEventArgs e)
{
   Window w = new Window();
   w.Closed += new EventHandler(w_Closed);
}

void w_Closed(object sender, EventArgs e)
{
   // Set your property here to true
}

Проще говоря, вы можете поиграть с этим свойством в вашем Trigger, чтобыизменить цвет вашего пункта меню.

0 голосов
/ 25 ноября 2011

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

Надеюсь, что поможет

...