2015-04-21 91 views
0

我在我的應用程序中使用Actipro功能區並利用可以將標準mdi主機的文檔標題與主功能區標題集成的方式正在使用(對接也是Actipro對接)。現在,當我使用特定供應商的控件時,我認爲/希望我的問題更通用一些。有沒有辦法在後面的代碼中引用綁定

目前提供此功能的Xaml已標記爲這樣。

<ribbon:RibbonWindow.DocumentName> 
    <MultiBinding Converter="{StaticResource ConditionalConverter}"> 
     <Binding ElementName="window" Path="IsMDIChildMaximized" /> 
     <Binding ElementName="standardMdiHost" Path="PrimaryWindow.Title" /> 
     <Binding Source="{x:Null}" /> 
    </MultiBinding> 
</ribbon:RibbonWindow.DocumentName> 

功能區本身是在代碼後面命名的,所以我可以在代碼後面寫一些東西;

MainRibbonWindow.DocumentName 

但是我不能得到MultiBinding。非常具體,我想找到一種方法來動態設置的ElementName上在XAML中結合第二線

<Binding ElementName="standardMdiHost" Path="PrimaryWindow.Title" /> 

,因爲我知道,正被所指向的實際standardmdihost到會改變(一切將保持相同)。

wpf中綁定的整個區域仍然被證明是一個非常尖銳的學習曲線,所以我歡迎任何有關如何實現預期結果的建議,或者即使可以這樣做第一個地方。

我遇到過this後,但我不確定它是否真的是答案,即使這是我將如何設置在這種情況下實施它。

非常感謝

編輯

意識到,我大概可以沿着這種路線的設置綁定做到這一點代碼:

Dim binding As New MultiBinding() With {.Converter = New BooleanAndConverter()} 
    binding.Bindings.Add(New Binding("AreWindowsMaximized") With {.Source = host}) 
    binding.Bindings.Add(New Binding("HasItems") With {.Source = host}) 
    Me.SetBinding(IsMDIChildMaximizedProperty, binding) 

但是初步嘗試

Dim binding2 As New MultiBinding() With {.Converter = New ConditionalConverter()} 
    binding2.Bindings.Add(New Binding("Binding1") with {.ElementName = "MainRibbonWindow", .Path = IsMDIChildMaximized} 

並不像預期的那樣。如果任何人都可能猜測什麼可能工作,我會非常感激。

回答

0

通過將DocumentName屬性綁定到視圖模型中的屬性的數據,您將擁有更多運氣。這樣的話,你可以自由地生成代碼的價值......也許是這樣的:

在XAML:

<ribbon:RibbonWindow DocumentName="{Binding DocumentName, Mode=OneWay}" ... /> 

在代碼:

public string DocumentName 
{ 
    get { return string.Format("{0}{1}", Value1, Value2); } 
} 

private string Value1 
{ 
    get { return value1; } 
    set { value1 = value; NotifyPropertyChanged("DocumentName"); 
} 

private string Value2 
{ 
    get { return value2; } 
    set { value2 = value; NotifyPropertyChanged("DocumentName"); 
} 

然後你只需要設置Value1Value2爲您需要的任何值,他們將更新DocumentName使用INotifyPropertyChanged接口(或更準確地說,INotifyPropertyChanged接口將通知UI的變化DocumentName屬性,然後檢索最新值)。

+0

非常感謝您的建議。最後(我不得不承認Actipro人員的一些很好的支持,我們提出了我在下面的答案中添加的代碼 –

0

只是爲了防止任何人偶然發現並且有類似的問題。我最初的錯誤是未能正確理解綁定語法是如何工作的,並且所有需要成功完成這些工作的線索都已經在我希望刪除並替換智慧代碼的xaml中。

最終結果(它確實有效)原來是;

Dim binding2 As New MultiBinding() With {.Converter = New ConditionalConverter()} 
    binding2.Bindings.Add(New Binding("IsMDIChildMaximized") With {.Source = MainRibbonWindow}) 
    binding2.Bindings.Add(New Binding("PrimaryWindow.Title") With {.Source = host}) 
    SetBinding(DocumentNameProperty, binding2) 

這是涉及Actipro色帶和對接ommands和兩個源(MainRibbonWindow和主機)的主要窗口,其標題,我們正試圖與文檔窗口的整合非常具體的問題,以及standardMdiHost本身。

我只想借此機會向那些閱讀過此問題併發布建議的人表達我的謝意,並向Actipro自己表示感謝,他們指出了我的方式錯誤並提供了最終正確的代碼。

相關問題