0

我尝试将 MVVM 用于 PixelSense 项目。我将一些元素绑定到 ScatterView:

<s:ScatterView x:Name="MainScatterView" ItemTemplateSelector="{DynamicResource myDataTemplateSelector}" ItemsSource="{Binding Path=MainMenus}"/>

我定义了一些数据模板:

    <DataTemplate x:Key="ActivityTemplate">
        <s:ScatterViewItem Loaded="ScatterViewItem_Loaded">
            <TextBlock Text="{Binding Path=Text}" />
        </s:ScatterViewItem>
    </DataTemplate>

    <DataTemplate x:Key="MainMenuTemplate">
        <s:ScatterViewItem Height="{Binding Path=Size, Mode=TwoWay}" Width="{Binding Path=Size, Mode=TwoWay}">
            <TextBlock/>
        </s:ScatterViewItem>
    </DataTemplate>

如您所见,我尝试将(例如)高度属性绑定到 ViewModel。

它不起作用,因为我的 SVI (ScatterViewItem) 将自动被另一个 SVI 包装。这是由 ScatterView 完成的。我现在的问题是:我该如何停用它,或者您知道解决方法吗?

谢谢你帮助我;-)

4

1 回答 1

0

我找到了一种解决方法......它不是最好的,但它有效:) 也许有人也会遇到这个问题:

我从模板中删除了周围的 ScatterViewItem 并添加了 Loaded-event:

    <DataTemplate x:Key="ActivityTemplate">
            <TextBlock Text="{Binding Path=Text}" Loaded="TextBlock_Loaded"/>
    </DataTemplate>

    <DataTemplate x:Key="MainMenuTemplate">
            <TextBlock Width="20" Height="20" Text="Hallo" Loaded="TextBlock_Loaded"/>
    </DataTemplate>

其余的在后面的代码中:

    private void TextBlock_Loaded(object sender, RoutedEventArgs e)
    {
        //Get the sourrounding ScatterViewItem via the VisualTree
        System.Windows.Media.Visual parent = (System.Windows.Media.Visual)VisualTreeHelper.GetParent((System.Windows.Media.Visual)sender);
        while (!(parent is ScatterViewItem))
        {
            parent = (System.Windows.Media.Visual)VisualTreeHelper.GetParent((System.Windows.Media.Visual)parent);
        }

        //the current parent is the surrounding SVI
        ScatterViewItem svi = parent as ScatterViewItem;

        //Bind the properties to the SVI
        Binding myBinding = new Binding("Size");
        myBinding.Source = svi.DataContext;
        svi.SetBinding(ScatterViewItem.HeightProperty, myBinding);
        svi.SetBinding(ScatterViewItem.WidthProperty, myBinding);
    }

如果您知道更好的解决方案:请告诉我;)

于 2014-03-13T14:44:36.010 回答