WPF привязка SharedSizeGroup на Grid не работает - PullRequest
0 голосов
/ 25 июня 2011

Я работаю над приложением WPF для практики MVVM.Мне нужно иметь 4 сетки, у всех есть только два столбца - один для элемента управления «отображение» (TextBlock / RadioButton с именем поля) и другой для элемента управления «значение» (любой элемент управления, необходимый для представления значения поля).

Каждая сетка в другом пользовательском элементе управления, и мне нужно, чтобы все их первые столбцы были синхронизированы, поэтому элементы управления «value» будут растягиваться по экрану, в то время как элементы «display» имеют общий размербудет иметь автоматическую ширину, которая не изменяется.

Если я установлю SharedSizeColumn с постоянным именем, все сетки будут в отличной и хорошо выглядящей синхронизации, но мне нужно установить SharedSizeColumn через привязку с моей моделью представления, потому что какой-то пользовательэлементы управления, содержащие эти сетки, совместно используются моделями представления с вкладками для повторного использования, а также для моделей с вкладками / представлениями. Я не хочу, чтобы сетки были синхронизированы.Когда я устанавливаю SharedSizeGroup с привязками, 2 столбца во всех сетках ведут себя так, будто SharedSizeGroup вообще не задан, я даже пытался установить привязку с помощью кода с помощью BindingOperations и все равно не повезло.

Любая идея, какуспешно связать SharedSizeGroup или другое решение для предотвращения совместного использования SharedSizeGroup между вкладками, которые повторно используют один и тот же пользовательский элемент управления?

1 Ответ

0 голосов
/ 25 июня 2011

Вот полный рабочий пример использования 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

, который показывает красные и синие столбцы, выстроенные в линию.

...