Переменная C # в коде XAML

У меня есть код частичного класса для формы XAML. Вот код:

partial class GalleryDictionary
{
    private void GalleryItemLabelPropertyChanged(object sender, RoutedEventArgs e)
    {
        var mainWindow = Application.Current.MainWindow as MainWindow;
        if (mainWindow == null)
            return; 

        var tb = sender as TextBox;
        if (tb == null)
            return;

        var sip = tb.DataContext as StereoImagePair;
        if (sip == null)
            return;

        sip.Label = tb.Text;

        mainWindow.Db.SubmitChanges();
    }
}

Это весь файл DOC.XAML.CS после объявления пространства имен.

В моем файле XAML мне нужно получить доступ к переменной из этого файла XAML.CS, которую я хотел бы назвать DriveOnRight. Вот строчка, с которой я боролся:

        <ToggleButton Grid.Row="1" Grid.Column="2" Width="26" Height="26" IsChecked="True" Click="GalleryItemLabelPropertyChanged" CommandParameter="2" Name="PS" Content="{Binding DriveOnRight}"></ToggleButton>

Где файл XAML читает .... Content = "{Binding DriveOnRight}" - это то место, где мне нужно получить доступ к переменной из файла CS и отобразить ее там.

Как мне это сделать?

Любая помощь будет оценена по достоинству.


person user2503112    schedule 19.06.2013    source источник


Ответы (3)


Видя, как это находится в вашем коде, чтобы оставаться в соответствии с вашим подходом, вы можете использовать свойство зависимости для своего значения.

public string DriveOnRight
{
    get { return (string)GetValue(DriveOnRightProperty); }
    set { SetValue(DriveOnRightProperty, value); }
}
public static readonly DependencyProperty DriveOnRightProperty =
    DependencyProperty.Register("DriveOnRight", typeof(string), typeof(GalleryDictionary));

Хотя я бы предположил, что дизайн Кришны лучше с использованием ViewModel.

person Dutts    schedule 24.06.2013

Вот один из способов:

public class GalleryDictionaryViewmodel: INotifyPropertyChanged
{
     private string _DriveOnRight;
     public string DriveOnRight
     {
         get{ return _DriveOnRight;}
         set{ _DriveOnRight = value;}
     }
}

В вашем файле CodeBehind (DOC.XAML.CS):

partial class GalleryDictionary
{
      public GalleryDictionaryViewModel GDViewModel;
      public GalleryDictionary()
      {
          GDViewMOdel = new GDViewModel();
          GDViewModel.DriveOnRight = "";
          this.DataContext = GDViewModel;
      }
}

В вашем файле Xaml:

 <ToggleButton Grid.Row="1" Grid.Column="2" Width="26" Height="26" IsChecked="True" Click="GalleryItemLabelPropertyChanged" CommandParameter="2" Name="PS" Content="{Binding DriveOnRight}"></ToggleButton>

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

person Krish    schedule 24.06.2013

Вы можете присвоить значение в коде позади, которое связано с функцией ЗАГРУЖЕНА кнопки или переключателя или любого другого объекта, который его использует.

На уровне выше вашей функции, чтобы установить значение, сделайте такой код.

    public static string DriveOnRight = "True";  
    //"True" could be a condition or function or whatever.

Тогда это может выглядеть так в коде позади:

    private void DS_Loaded(object sender, RoutedEventArgs e)
    {
        ToggleButton tg = sender as ToggleButton;
        if (//WhateverYourPathToTheVariable//.DriveOnRight == "True")
        {
            tg.Content = "DS"; 
        }
        else
        {
            tg.Content = "PS";
        }

    }

А затем ... в коде XAML у вас есть следующее:

        <ToggleButton Loaded="DS_Loaded" Grid.Row="1" Grid.Column="0" Width="26" Height="26" Name="DS" Content="DS"></ToggleButton> 
person Bman    schedule 15.07.2013