我有一个使用AvalonDock的窗口管理器项目。数据绑定不能在Avalondock窗口上工作
基本上在两个元素:一个LayoutAnchorableItem
展示我不同的工具盒(目前之一,由树视图)和一个LayoutItem
以示与树视图打开的文档(自定义控制,具有可绑定的参数 - 在理论上)
DockingManager的ViewModel托管名为Panes
的ObservableCollection
,它将是LayoutItems。如果我不尝试绑定在XAML中的参数,并迫使这样
<avalonDock:DockingManager.LayoutItemTemplateSelector>
<panes:PanesTemplateSelector>
<panes:PanesTemplateSelector.ExchangeViewTemplate>
<DataTemplate>
<xchng:Exchange/>
</DataTemplate>
</panes:PanesTemplateSelector.ExchangeViewTemplate>
<panes:PanesTemplateSelector.GraphViewTemplate>
<DataTemplate>
<grph:Graph TickerCode="ILD" ExchangeCode="EPA"/>
</DataTemplate>
</panes:PanesTemplateSelector.GraphViewTemplate>
</panes:PanesTemplateSelector>
</avalonDock:DockingManager.LayoutItemTemplateSelector>
Exchange
值
事作品“精”是工具箱和Graph
是LayoutItems。
为对接经理的初始数据绑定就像下面这样:
<avalonDock:DockingManager Margin="0,0,0,0"
Grid.Row="1"
AnchorablesSource="{Binding Tools}"
DocumentsSource="{Binding Panes}"
ActiveContent="{Binding ActiveDocument, Mode=TwoWay, Converter={StaticResource ActiveDocumentConverter}}"
x:Name="dockManager">
注意,面板是有两个公共参数GraphViewModel
类型:ExchangeCode
和TickerCode
。
事情是我想要将TickerCode
和ExchangeCode
绑定到Panes.TickerCode和Panes.ExchangeCode值。
所以,我想这一点:
<grph:Graph TickerCode="{Binding TickerCode, UpdateSourceTrigger=PropertyChanged}" ExchangeCode="{Binding ExchangeCode, UpdateSourceTrigger=PropertyChanged}"/>
但不起任何作用:TickerCode和ExchangeCode在自定义控件等于""
相反,当我强迫在XAML的值。
此外有点奇怪的是,如果我在代码执行中,Panes
实际上具有TickerCode和ExchangeCode的值,它们只是不绑定。例如,实际创建窗格的代码是
public void AddGraph(string FullName, string ExchangeCode, string TickerCode)
{
var graphViewModel = new GraphViewModel(FullName, ExchangeCode, TickerCode);
_panes.Add(graphViewModel);
ActiveDocument = graphViewModel;
}
这里,每一步都有两个值。让我们想象一下,我添加了5个不同的窗格,它们都具有正确的ExchangeCode和TickerCode,但没有任何内容被传递给自定义控件。
如果您需要更多关于我的自定义控件的值,请将值绑定到以下代码:Passing parameters to custom control (databinding)。
备注:正如您所看到的,我并未放置大部分代码,如果您认为它可能有所帮助,请提出要求,我将添加所需内容。请注意,整个窗口管理器的全局逻辑与AvalonDock测试应用程序(AvalonDock.MVVMTestApp)中提供的相同。
我想我正在使用的数据绑定方法存在问题。如果拿出与我目前的问题无关的所有东西,并创建一个空白项目,只用一个带有datacontext的自定义控件Graph来创建一个只有两个参数的空白项目,并将它们绑定到自定义控件:同样的问题,尽管参数实际上存在于datacontext,但不传递给自定义控件。我会看看那里... –