Привязка к состоянию IsChecked ToggleButton WPF

, Как я инкапсулирую сохранение больше чем одного объекта транзакционным способом с помощью шаблона репозитория? Например, что, если я хотел добавить порядок и обновить клиентское состояние на основе того создания порядка, но только сделать так если порядок, завершенный успешно? Следует иметь в виду, что для этого примера, заказы не являются набором в клиенте. Они - свой собственный объект.

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

Поэтому, если бы можно справиться с транзакциями в более высоком уровне затем, мои две опции были бы:

  1. Первичная проверка - Например, в сервисе, координирующем поведение, решает, хотите ли Вы продолжить двигаться путем выяснения у Порядка/Клиента, если любой говорит, что они затем не делают не, даже пытаются обновить любого из них.
  2. Откат - Только продолжается, обновляя Клиента/Порядок и если вещи приводят часть к сбою путь посредством отката транзакция базы данных.

, Если Вы идете для второй опции затем, вопрос - то, что происходит с объектами в оперативной памяти, Вашего Клиента можно было бы оставить в непоследовательном состоянии. Если это будет иметь значение, и я работаю в сценариях, где это не делает, поскольку объект был только загружен в для того запроса, то я буду рассматривать первичную проверку, если его возможное, потому что это намного легче, чем альтернативы (откатывающий изменения в оперативной памяти или перезагружающий объекты).

24
задан M. Dudley 7 October 2009 в 21:21
поделиться

3 ответа

Вам нужно привязать Visibility через конвертер:

<Window
  x:Class="WpfApplication1.Window1"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Window.Resources>
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
  </Window.Resources>
  <StackPanel>
    <ToggleButton x:Name="toggleButton" Content="Toggle"/>
    <TextBlock
      Text="Some text"
      Visibility="{Binding IsChecked, ElementName=toggleButton, Converter={StaticResource BooleanToVisibilityConverter}}"/>
  </StackPanel>
</Window>

В Silverlight нет BooleanToVisibilityConverter , но легко написать свой собственный с некоторыми добавленными функциями:

using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;

namespace WpfApplication1 {

  public class BooleanToVisibilityConverter : IValueConverter {

    public Object Convert(Object value, Type targetType, Object parameter, CultureInfo culture) {
      if (targetType == typeof(Visibility)) {
        var visible = System.Convert.ToBoolean(value, culture);
        if (InvertVisibility)
          visible = !visible;
        return visible ? Visibility.Visible : Visibility.Collapsed;
      }
      throw new InvalidOperationException("Converter can only convert to value of type Visibility.");
    }

    public Object ConvertBack(Object value, Type targetType, Object parameter, CultureInfo culture) {
      throw new InvalidOperationException("Converter cannot convert back.");
    }

    public Boolean InvertVisibility { get; set; }

  }

}

Теперь вы можете указать преобразователь, который отображает true в Свернуто и false до Visible :

<BooleanToVisibilityConverter
  x:Key="InverseBooleanToVisibilityConverter" InvertVisibility="True"/>
44
ответ дан 28 November 2019 в 23:08
поделиться

Используйте BooleanToVisibilityConverter:

<BooleanToVisibilityConverter x:Key="bvc" />
<TextBlock Visibility="{Binding IsChecked, ElementName=toggle, Converter={StaticResource bvc}}" />
8
ответ дан 28 November 2019 в 23:08
поделиться

Есть ли причина, по которой вы не просто используете Expander ? В любом случае, он основан на ToggleButton.

0
ответ дан 28 November 2019 в 23:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: