WPF绑定网格上的SharedSizeGroup不起作用

时间:2011-06-24 21:48:34

标签: wpf mvvm binding grid

我正在研究WPF应用程序来练习MVVM。我需要有4个网格,所有只有两列 - 一个用于“显示”控件(带有字段名称的TextBlock / RadioButton),另一个用于“值”控件(表示字段值所需的任何控件) )。

另一个用户控件中的每个网格,我需要让它们的所有第一列同步,因此“值”控件将在屏幕上伸展,而“显示”控件的共享大小将具有自动宽度不会改变。

如果我使用常量名称设置SharedSizeColumn,所有网格都是完美且美观的同步,但我需要通过绑定我的视图模型来设置SharedSizeColumn,因为包含这些网格的一些用户控件在选项卡式视图模型之间共享为了重用,跨标签/视图模型,我不希望网格同步。 当我使用绑定设置SharedSizeGroup时,所有网格中的2列就像没有设置任何SharedSizeGroup一样,我甚至尝试使用BindingOperations通过代码设置绑定,但仍然没有运气。

知道如何成功绑定SharedSizeGroup,或者是否有其他解决方案阻止在重用相同用户控件的选项卡之间共享SharedSizeGroup?

1 个答案:

答案 0 :(得分:0)

以下是使用SharedSizeGroup进行数据绑定的完整工作示例。

标记:

<Grid>
    <StackPanel Grid.IsSharedSizeScope="True" Margin="20">
        <Grid HorizontalAlignment="Left">
            <Grid.ColumnDefinitions>
                <ColumnDefinition SharedSizeGroup="{Binding ColumnA}"/>
                <ColumnDefinition SharedSizeGroup="{Binding ColumnB}"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="aa" Grid.Column="0" Foreground="Red"/>
            <TextBlock Text="bbbbbbbb" Grid.Column="1" Foreground="Blue"/>
        </Grid>
        <Grid HorizontalAlignment="Left">
            <Grid.ColumnDefinitions>
                <ColumnDefinition SharedSizeGroup="{Binding ColumnC}"/>
                <ColumnDefinition SharedSizeGroup="{Binding ColumnD}"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="cccccccc" Grid.Column="0" Foreground="Red"/>
            <TextBlock Text="dd" Grid.Column="1" Foreground="Blue"/>
        </Grid>
    </StackPanel>
</Grid>

和代码隐藏:

void Window_Loaded(object sender, RoutedEventArgs e)
{
    DataContext = new SharedSizeGroupViewModel
    {
        ColumnA = "group1",
        ColumnB = "group2",
        ColumnC = "group1",
        ColumnD = "group2",
    };
}

和原始视图模型:

public class SharedSizeGroupViewModel
{
    public string ColumnA { get; set; }
    public string ColumnB { get; set; }
    public string ColumnC { get; set; }
    public string ColumnD { get; set; }
}

这就是它的样子:

SharedSizeGroup Demo

显示红色和蓝色列排成一行。