Свойство зависимости, зависящее от другого

Нет никакого способа, которым клиент может определить корень веб-приложения, не будучи сказанным сервером, поскольку он не знает о конфигурации сервера. Одна опция, которую можно попробовать, состоит в том, чтобы использовать основной элемент в главном элементе, заставляя сервер генерировать его динамично, а не жесткое кодирование он (таким образом, это показывает соответствующий URL для каждого сервера):

<base href="http://path/to/webapp/root/" />

как Все URL будут тогда рассматривать относительно этого. Вы поэтому просто выполнили бы свой запрос к/data.json. Действительно однако необходимо удостовериться, чтобы все другие ссылки в приложении приняли во внимание это.

23
задан Gregyski 1 September 2009 в 22:54
поделиться

2 ответа

Хммм ... Я думаю, вам лучше взглянуть на свойства зависимостей принуждение значений . Вот пример с принуждением:

public class ViewModel : DependencyObject
{
  public bool TestBool
  {
    get { return (bool)GetValue(TestBoolProperty); }
    set { SetValue(TestBoolProperty, value); }
  }
  public static readonly DependencyProperty TestBoolProperty =
    DependencyProperty.Register("TestBool", typeof(bool), typeof(ViewModel), new PropertyMetadata(false, OnTestBoolPropertyChanged));

  private static void OnTestBoolPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
  {
    var vm = (ViewModel)d;
    vm.CoerceValue(TestDoubleProperty);
  }

  public double TestDouble
  {
    get { return ((double)GetValue(TestDoubleProperty)); }
    set { SetValue(TestDoubleProperty, value); }
  }
  public static readonly DependencyProperty TestDoubleProperty =
    DependencyProperty.Register("TestDouble", typeof(double), typeof(ViewModel), new PropertyMetadata(0.0, null, OnCoerceTestDouble));

  private static object OnCoerceTestDouble(DependencyObject d, object baseValue)
  {
    var vm = (ViewModel) d;
    var testBool = vm.TestBool;
    return ((testBool) ? (100.0) : (200.0));
  }
}
21
ответ дан 29 November 2019 в 02:54
поделиться

Вы действительно правы, вам следует использовать PropertyChangedCallback. Вот как это сделать:

public bool TestBool
{
  get { return (bool)GetValue(TestBoolProperty); }
  set 
  { 
    SetValue(TestBoolProperty, value);
  }
}
public static readonly DependencyProperty TestBoolProperty =
  DependencyProperty.Register("TestBool", typeof(bool), typeof(ViewModel),
  new PropertyMetadata(false, new PropertyChangedCallback(OnTestBoolChanged)));

private static void OnTestBoolChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
  ViewModel vm = d as ViewModel;
  vm.TestDouble = value ? 100.0 : 200.0;
}

public double TestDouble
{
  get { return ((double)GetValue(TestDoubleProperty)); }
  set { SetValue(TestDoubleProperty, value); }
}
public static readonly DependencyProperty TestDoubleProperty =
  DependencyProperty.Register("TestDouble", typeof(double), typeof(ViewModel));
1
ответ дан 29 November 2019 в 02:54
поделиться
Другие вопросы по тегам:

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