Nano Hash - криптовалюты, майнинг, программирование

Как связать Grid ColumnDefinition.Width на универсальной платформе?

Извините, я не нашел ответа.

<Grid x:Name="MyGrid" Background="LightGray" >
  <Grid.ColumnDefinitions >
    <ColumnDefinition MaxWidth="30"/>
    <ColumnDefinition Width="{Binding Column1 , Mode=TwoWay}"/>
    <ColumnDefinition MaxWidth="30"/>
  </Grid.ColumnDefinitions>
  <Grid Grid.Column="0">
    <TextBox Text="0"/>
  </Grid>
  <Grid Grid.Column="1">
    <TextBox Text="1"/>
  </Grid>
  <Grid Grid.Column="2">
    <TextBox Text="2"/>
  </Grid>
</Grid>

Код позади:

public sealed partial class MainPage : Page
{
  private GridLength _column1 = new GridLength(10);
  public GridLength Column1
  {
    get
    {
      return _column1;
    }
    set
    {
     _column1 = value;
    }
  }

  public MainPage()
  {
    this.InitializeComponent();
  }
}

Что не так с этим кодом? кстати, есть ли возможность оставить раздел Grid.ColumnDefinitions в xaml и установить свойства ColumnDefinition непосредственно для столбца (не устанавливайте переменную для каждого свойства в коде позади)

03.08.2018

  • вы должны реализовать INotifyPropertyChanged . 03.08.2018
  • спасибо за ответ, реализовал, не помогает. Любые другие идеи? 03.08.2018
  • Ну, я вижу, что свойство Value для GridLength доступно только для чтения (нет метода установки). Вы можете определить DependencyProperty типа double и зарегистрировать для него PropertyChangedCallback, чтобы изменить ширину этого конкретного столбца. 03.08.2018

Ответы:


1

Привязка используйте DataContext в качестве источника по умолчанию, если вы хотите связать свойство Column1 на своей странице за кодом, вы должны указать контекст данных этой страницы, поэтому просто добавьте следующий код в конструктор MainPage.

public MainPage()
{
    this.InitializeComponent();
    //Add this code to specify the binding's data context
    this.DataContext = this;
}

---Обновлять---

Как правило, мы используем привязку для привязки свойства модели данных. Если вы хотите изменить значение столбца/сетки, изменив некоторые параметры из кода, вы можете реализовать INotifyPropertyChanged и подпишите свойство на PropertyChanged. Вот простой пример кода, основанный на приведенном выше коде,

В xaml я добавляю кнопку, чтобы изменить свойство Column1 в событии клика,

<Grid x:Name="MyGrid" Background="LightGray" >
    <Grid.ColumnDefinitions >
        <ColumnDefinition x:Name="Column0" MaxWidth="30"/>
        <ColumnDefinition Width="{Binding Column1 , Mode=TwoWay}"/>
        <ColumnDefinition MaxWidth="30"/>
    </Grid.ColumnDefinitions>
    <Grid Grid.Column="0">
        <TextBox Text="0"/>
        <Button Content="click me to change the Column 1's width" Click="Button_Click"/>
    </Grid>
    <Grid Grid.Column="1">
        <TextBox Text="1"/>
    </Grid>
    <Grid Grid.Column="2">
        <TextBox Text="2"/>
    </Grid>
</Grid>

Вот код реализации INotifyPropertyChanged< /а> интерфейс.

public sealed partial class MainPage: Page, INotifyPropertyChanged
{

    private GridLength _column1 = new GridLength(20);

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string PropertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
        }
    }

    public GridLength Column1
    {
        get
        {
            return _column1;
        }
        set
        {
            _column1 = value;
            OnPropertyChanged("Column1");
        }
    }
    public MainPage()
    {
        this.InitializeComponent();
        //Add this code to specify the binding's data context
        this.DataContext = this;
    }

    Double width = 20;
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Column1 = new GridLength(width += 10);
    }
}
06.08.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..