昨天在網上看到乙個網友問如何在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 這個屬性目的是設定按鈕...