2010-12-07 4 views
0

У меня есть некоторый код следующим образом:Использовать переменную из экземпляра класса в конвертере?

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; тоже не работает - оно не распознает этот экземпляр.

ответ

1

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

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

Сделать 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.

+0

Хотя я не думаю, что это лучший подход, я не могу думать о другом, и ваше решение обязательно будет работать. Только одно предложение: возможно, конструктор должен принять ссылочное значение: public NextEnabled (ref Window w) – 2010-12-07 21:33:04