建立相互依賴(影響)的WPF屬性

2021-09-20 15:15:19 字數 2993 閱讀 3295

昨天在網上看到乙個網友問如何在wpf裡面實現相互依賴的屬性,例如下面乙個類:

using

system;

public

class

rtdfield

set}

private

double x1;

public

double x2

set}

private

double x2;

public

double x

set}

public

double offsetx

set}

#endregion

}需要實現,如果offsetx發生了變化,

那麼x1和x2跟著發生變化,然而x1或者x2發生變化,那麼x和offsetx的值也發生變化。

我第乙個想到的方法就是使用wpf的資料繫結,使用多重繫結(multibinding)和對應的轉換器(converter)來做,因為資料繫結支援雙向繫結(mode.twoway),即乙個屬性變化了,依賴它的其他屬性都跟著變化,而依賴屬性變化了,原先的屬性也會跟著發生變化。

使用資料繫結的方法,其實就是將offsetx和x屬性繫結到x1和x2上面,資料來源是物件自己,然後把x和offsetx裡面的set函式移到對應的值轉換器(valueconverter)裡面就好了。

**:public

partial

class

window1 : window }

public

class

testclass : dependencyobject

set  }

public

static

readonly dependencyproperty x1property =

dependencyproperty.register("x1", typeof(double), typeof(testclass), newuipropertymetadata(0.0));

public

double x2

set  }

public

static

readonly dependencyproperty x2property =

dependencyproperty.register("x2", typeof(double), typeof(testclass), newuipropertymetadata(0.0));

public

double x

set  }

public

static

readonly dependencyproperty xproperty =

dependencyproperty.register("x", typeof(double), typeof(testclass), newuipropertymetadata(0.0));

public

double offsetx

set  }

public

static

readonly dependencyproperty offsetxproperty =

dependencyproperty.register("offsetx", typeof(double), typeof(testclass), newuipropertymetadata(0.0));

public testclass()

); binding.bindings.add(new binding("x2")

); binding.converter = new x1x2toxconverter();

// 下面這個模式也要設定,否則

x屬性更改不會

// 讓wpf

自動呼叫

x1x2toxconverter.convertback

函式 binding.mode = bindingmode.twoway;

binding.converterparameter = this;

bindingoperations.setbinding(this, xproperty, binding);

binding = new multibinding();

binding.bindings.add(new binding("x1")

); binding.bindings.add(new binding("x2")

); binding.converter = new x1x2tooffsetxconverter();

binding.mode = bindingmode.twoway;

binding.converterparameter = this;

bindingoperations.setbinding(this, offsetxproperty, binding);

} }public

class

x1x2toxconverter : imultivalueconverter

public

object convertback(object value, type targettypes, object parameter, system.globalization.cultureinfo culture) ;

return result; }

#endregion }

public

class

x1x2tooffsetxconverter : imultivalueconverter

public

object convertback(object value, type targettypes, object parameter, system.globalization.cultureinfo culture) ;

return result; }

#endregion }

標籤: 

wpf

promise處理多個相互依賴的非同步請求

在專案中,經常會遇到多個相互依賴的非同步請求。如有a,b,c三個ajax請求,b需要依賴a返回的資料,c又需要a和b請求返回的資料。如果採用請求巢狀請求的方式自然是不可取的。導致 難以維護,如何請求很多。會出現很多問題。promise就是解決多個非同步請求的問題。promise是es6提供的乙個物件...

WPF的XAML依賴屬性

屬性分三種,基本屬性 附加屬性和依賴屬性。屬性有四種使用方式,第一種是使用屬性語法,每個屬性對應乙個屬性值,屬性值型別必須與屬性匹配 乙個標記中可以設定物件的多個屬性,只有例項化物件才可以設定例項屬性 第二種是使用屬性元素語法,某些屬性可以使用屬性元素語法來設定 第三種是使用內容元素語法,某些元素的...

WPF中的依賴屬性

昨天學習了下wpf的以來屬性,記錄下自己的理解。我們一般給乙個類設定乙個屬性很簡單,但是如果給乙個控制項設定乙個屬性,會比較麻煩。比如說,自己做乙個button控制項,繼承自button 1 class mybutton button 2 11 set 12 15 16 17 這個屬性目的是設定按鈕...