Использовать переменную из экземпляра класса в конвертере? - PullRequest
0 голосов
/ 08 декабря 2010

У меня есть следующий код:

 public partial class MainWindow : Window
 {
  public bool Adam = true;

  public MainWindow()
  {
   InitializeComponent();
  }

  public class NextEnabled : IValueConverter
  {
   public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
   {

    return Adam;
   }

   public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
   {
    return true;
   }
  }
 }

Я хочу, чтобы мой конвертер возвращал значение Адама. Я понимаю, что это не работает сейчас, потому что класс конвертера не имеет ссылки на экземпляр MainWindow. В XAML главное окно называется «window_main», и я хочу сослаться на этот экземпляр, но не могу.

Есть ли способ сделать это? Использование return window_main.Adam; также не работает - он не распознает этот экземпляр.

Ответы [ 2 ]

1 голос
/ 08 декабря 2010

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

public static class Globals
{
    public static MainWindow MainWindow;
}

public partial class MainWindow : Window
{
    public bool Adam = true;

    public MainWindow()
    {
        Globals.MainWindow = this;
        InitializeComponent();
    }

    public class NextEnabled : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return Globals.MainWindow;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return true;
        }
    }
}
0 голосов
/ 08 декабря 2010

Сделать NextEnabled следующим образом

  public class NextEnabled : IValueConverter
  {
   protected Window window_main;
   public NextEnabled(Window w) { window_main = w; }

   public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
   {

    return window_main.Adam;
   }

   public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
   {
    return true;
   }
  }

Вы должны вызвать этот новый конструктор при создании NextEnabled.

...