2015-04-21 64 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自己表示感谢,他们指出了我的方式错误并提供了最终正确的代码。

相关问题