如何在WPF中绑定到contentcontrol中的元素

时间:2018-01-18 11:05:37

标签: c# wpf xaml mvvm

我是WPF的新手,目前正在开发原型。在这个项目中,我使用了contentcontrols和自定义用户控件。

结构基本上是: MainWindow - > MainViews的Ribbon + TabControl

MainView - > ContentView + EditPanel

EditPanel - > DetailInfo + Editor

现在这个编辑器包含一个FrameworkElement,它公开了我想要从功能区绑定到的一些命令,但我无法使绑定工作。 MainView和EditPanel是用户控件。

MainWindow Xaml看起来基本上是这样的:

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
    <Button Command="{Binding ElementName="MainTabControl", Path=SelectedContent.xxxx      }" />

> this gives me the MainViewModel, not the MainView


        <Ribbon Grid.Row="0" />
        <TabControl Name="MainTabControl"
                    Grid.Row="1"
                    ItemsSource="{Binding ListOfMainViewModels}">
            <TabControl.ContentTemplate>
                <DataTemplate>
                    <view:MainView DataContext="{Binding Data}" />
                </DataTemplate>
            </TabControl.ContentTemplate>
        </TabControl>
    </Grid>

MainView.xaml可归结为:

<Grid>
        <Grid.ColumnDefinitions>
            ...
        </Grid.ColumnDefinitions>

        <ContentControl Grid.Column="0"
                        Content="{Binding CurrentContentView}" />
        <ContentControl Grid.Column="1">
            <ContentControl.Content>
                <View:QuickEditView DataContext="{Binding CurrentViewViewModel.SelectedItem}" />
            </ContentControl.Content>
        </ContentControl>
    </Grid>

最后是QuickEditView,它有一个公开所需命令的编辑器元素:

<Grid>
    ...
    <sccontrols:MemoEditControl />
    ...
</Grid>

如果我尝试从MainView到编辑器控件的绑定没有问题,但我无法从MainWindow中的功能区开始工作。 在我看来,问题是我无法进入tabcontrol中的MainView。 selecteditem以及selectedcontent是MainViewModel,而不是MainView,我不愿意在viewmodel中保持对视图的引用

有什么建议吗?提前谢谢。

编辑:广泛的MainViewModel

public class MainViewModel : INotifyChanged etc
{
public System.Collections.ObjectModel.ObservableCollection<DisplayStyles> AvailableDisplayStyles {...}
public DisplayStyles SelectedDisplayStyle {...}

public SelectableListViewModelBase<DetailViewModel> CurrentViewViewModel{...}
public System.Windows.Controls.Control CurrentContentView{...}

...
}

MainWindowViewModel只包含MainViewModel列表以及selectedMainviewModel +一串命令

我目前的想法是要通过可视化树来查找正确的元素(我怀疑这里的性能会是一个问题),或者通过依赖属性将元素推向封装控件(噩梦的位置到从长远来看,我想象)

0 个答案:

没有答案