WPF数据将ViewModel属性绑定到用户控件中的ListBox后面的代码

时间:2016-05-12 06:32:35

标签: c# wpf xaml data-binding

我试图在后面的代码中动态绑定一个VM属性(一个可观察的集合)到listBox中的图像,该列表位于我在窗口中显示的usercontrol中, 但它没有用。

这是用户控件的XAML:     

<WrapPanel x:Name="panel" HorizontalAlignment="Center" Focusable="False" FocusManager.IsFocusScope="False">
    <ListBox x:Name="MazeListBox" ItemsSource="{Binding}">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid x:Name="MazeUniformGrid" Columns="{Binding VM_MazeCols}" Rows="{Binding VM_MazeRows}"/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Image x:Name="Img" Margin="-6" Source="{Binding}" Focusable="False"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</WrapPanel>

这是外部窗口的XAML中的用户控件:

    <Controls:MazeBoard1  x:Name="you" Margin="0,0,650,0" Grid.Column="0" Height="Auto" Width="Auto" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    <Controls:MazeBoard1 x:Name="other" Margin="650,0,0,0" Grid.Column="0" Height="Auto" Width="Auto" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Center"/>

这是我在窗口的cs中动态绑定的方式:

            Binding youBinding = new Binding
        {
            Path = new PropertyPath("VM_MazeDisplay"),
        };

        Binding otherBinding = new Binding
        {
            Path = new PropertyPath("VM_OtherMazeDisplay"),
        };
        you.MazeListBox.SetBinding( ContentControl.ContentProperty,youBinding);
        other.MazeListBox.SetBinding(ContentControl.ContentProperty, otherBinding);

我很感激你的帮助。 谢谢

1 个答案:

答案 0 :(得分:1)

你的XAML上的一切看起来都很奇怪...但如果你做了以下事情: you.MazeListBox.SetBinding(ListBox.DataContextProperty, youBinding) 要么 you.SetBinding(UserControl.DataContextProperty, youBinding) 甚至you.MazeListBox.SetBinding(ListBox.ItemsSourceProperty, youBinding)(您必须将绑定删除到您的xaml中)。

你应该有预期的结果。

但是,为什么在这一点上进行绑定而不仅仅是设置DataContext?像you.DataContext = VM_MazeDisplay之类的东西(假设以这种方式调用VM的实例)。

另外,为什么要将ListBox放入WrapPanel