Из google в многочисленных статьях говорится, что DependencyProperty является статическим, поскольку он имеет механизм KeyValue для поддержания значения каждого экземпляра объекта.Как WPF DependencyProperty захватывает ключ, чтобы различать каждый экземпляр объекта и искать значения DependencyProperty?
Но проблема в том, что если мы вызываем GetValue/SetValue в DependencyProperty, как он идентифицирует каждый экземпляр и генерирует ключ, чтобы читать/сохранять значения из HashTable для другого экземпляра объекта?
Например: если мы создаем 2 экземпляра TestDp, а затем устанавливаем значение для TestDProperty обоих экземпляров, как SetValue идентифицирует каждый экземпляр и сохраняет значение DependencyProperty в хэш-таблице соответственно?
Я проверил код для GetValue & SetValue of DependencyObject, но я до сих пор не могу понять, как он различает каждый экземпляр. Код this.LookupEntry (dp.GlobalIndex) будет записывать EntryIndex, но я не уверен, как генерируется GlobalIndex, чтобы различать каждый экземпляр объекта.
public class TestDp : DependencyObject
{
protected static DependencyProperty dpTest = DependencyProperty.Register("TestDProperty", typeof(string), typeof(TestDp));
public string TestDProperty
{
get
{
var r = (string)GetValue(dpTest);
return r;
}
set
{
SetValue(dpTest, value);
}
}
}
Не уверен, что я понимаю ваш вопрос, но вы вызываете 'GetValue' /' SetValue' в текущем экземпляре 'DependencyObject'. Также 'dpTest' должен быть назван' TestDProperty', а оболочка CLR должна называться 'TestD' и имя зарегистрированного свойства _" TestD "_ – dkozl
*** установить значение для TestDProperty обоих экземпляров ***, когда вы это сделаете, вы конечно, нужно вызвать 'SetValue' на *** разных экземплярах ***, поэтому он знает, где сохранить данные отдельно. Обратите внимание, что данные разделяются только тогда, когда они имеют значение *** *** ***, как только они меняются для определенного экземпляра, они больше не будут использоваться совместно. –
Я проверил код для GetValue & SetValue DependencyObject, но я до сих пор не могу понять, как он различает каждый экземпляр. Код this.LookupEntry (dp.GlobalIndex) будет записывать EntryIndex, но я не уверен, как генерируется GlobalIndex, чтобы различать каждый экземпляр объекта. – mind1n