powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / GridSplitter и Binding
7 сообщений из 7, страница 1 из 1
GridSplitter и Binding
    #38963907
Oleg5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Есть такая ситуация. Есть Grid, у него три строки. В первой строке расположены элементы в группе, во второй расположен GridSplitter, в третьей элементы в группе. Плюс высота строки первого грида забиндина на значение enum через конвертер. Для одного значения enum высота ставиться в Auto и элементы в первой строке скрываются. Вторая группа элементов растягивается на полную форму. Для другого значения enum высота ставиться в "*" и элементы первой строки показываются, плюс между элементами групп из первой строки и третьей - сплиттер. Можно ресайзить. Проблема в том, что когда я перемещаю сплиттер для режима отображения двух групп элементов, сплиттер убивает биндинг и ставит в высоту строки какое-то фиксированное, вычисленное значение. А когда я возвращаюсь в режим одной группы элементов без сплиттера, биндинга уже нет на строке грида, элементы скрываются а высота в auto не ставится, а остается фиксом, который выставил сплитер. И вторая группа элементов не растягивается на всю форму. Если сплиттер не трогать, то все работает как нужно. Как сделать так, чтобы сплиттер не убивал биндинг к высоте строки грида?
...
Рейтинг: 0 / 0
GridSplitter и Binding
    #38963942
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg5555Добрый день!

Есть такая ситуация. Есть Grid, у него три строки. В первой строке расположены элементы в группе, во второй расположен GridSplitter, в третьей элементы в группе. Плюс высота строки первого грида забиндина на значение enum через конвертер. Для одного значения enum высота ставиться в Auto и элементы в первой строке скрываются. Вторая группа элементов растягивается на полную форму. Для другого значения enum высота ставиться в "*" и элементы первой строки показываются, плюс между элементами групп из первой строки и третьей - сплиттер. Можно ресайзить. Проблема в том, что когда я перемещаю сплиттер для режима отображения двух групп элементов, сплиттер убивает биндинг и ставит в высоту строки какое-то фиксированное, вычисленное значение. А когда я возвращаюсь в режим одной группы элементов без сплиттера, биндинга уже нет на строке грида, элементы скрываются а высота в auto не ставится, а остается фиксом, который выставил сплитер. И вторая группа элементов не растягивается на всю форму. Если сплиттер не трогать, то все работает как нужно. Как сделать так, чтобы сплиттер не убивал биндинг к высоте строки грида?

понять, что вы там наворотили невозможно, покажите XAML код и там уже будем думать, вообще для GridSplitter'а не нужно отдельная строка достаточно разместить его той строке размер которой вы планируйте менять.
Но проблему это вашу скорее всего не решит.
...
Рейтинг: 0 / 0
GridSplitter и Binding
    #38964011
Oleg5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот кусок разметки, отвечающий за интересующую меня вкладку. Кусок достаточно большой. Но интересуют строки грида у которых биндится высота, между ними сплитер. Есть два режима отображения рисков. Интегрированные риски с включенными в каждый дифференцированными (отображаются два грида со сплитером). И список дифференцированных рисков. В этом случае верхний dataGrid скрывается, нижний по своему наполняется и растягивается на всю вкладу, соответственно без сплитера. Если в первом режиме двинуть сплитер, то биндинги со строк grid сбиваются и уже строка с первым dataGrid не получит высоту auto и не сожмется.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
<TabItem Header="Управление рисками">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="65"/>
                        <RowDefinition Height="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.risksMode, Converter={StaticResource gridRowRiskHeightConverter}, ConverterParameter={x:Static base:GridRowRiskHeightConverterMode.Normal}}"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.risksMode, Converter={StaticResource gridRowRiskHeightConverter}, ConverterParameter={x:Static base:GridRowRiskHeightConverterMode.AnlyInfinity}}"/>
                    </Grid.RowDefinitions>
                    
                    <GroupBox Header="Режим отображения рисков" Margin="10, 5, 10, 5">
                        <Grid Width="760" HorizontalAlignment="Left">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="380"/>
                                <ColumnDefinition Width="380"/>
                            </Grid.ColumnDefinitions>
                            <RadioButton IsChecked="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.risksMode, Converter={StaticResource enumToBooleanConverter}, ConverterParameter={x:Static base:RisksMode.IntegrationRisks}}" Grid.Column="0" Margin="5, 2, 0, 0" VerticalAlignment="Center" HorizontalAlignment="Left" Content="Интегрированные риски с включением дифференцированых" GroupName="risksMode">
                                <interactivity:Interaction.Triggers>
                                    <interactivity:EventTrigger EventName="Checked">
                                        <interactivity:InvokeCommandAction Command="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.RisksModeCheckedCommand}"/>
                                    </interactivity:EventTrigger>
                                </interactivity:Interaction.Triggers>
                            </RadioButton>
                            <RadioButton IsChecked="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.risksMode, Converter={StaticResource enumToBooleanConverter}, ConverterParameter={x:Static base:RisksMode.DifRisks}}" Grid.Column="1" Margin="25, 2, 0, 0" VerticalAlignment="Center" HorizontalAlignment="Left" Content="Общий список дифференцированных рисков" GroupName="risksMode">
                                <interactivity:Interaction.Triggers>
                                    <interactivity:EventTrigger EventName="Checked">
                                        <interactivity:InvokeCommandAction Command="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.RisksModeCheckedCommand}"/>
                                    </interactivity:EventTrigger>
                                </interactivity:Interaction.Triggers>
                            </RadioButton>
                        </Grid>
                    </GroupBox>

                    <GroupBox Grid.Row="1" Header="Интегрированные риски" Visibility="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.risksMode, Converter={StaticResource risksModeVisibilityConverter}}" Margin="10, 5, 10, 5">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="50"/>
                                <RowDefinition Height="*"/>
                            </Grid.RowDefinitions>

                            <Button HorizontalAlignment="Left" Margin="10, 0, 0, 0" VerticalAlignment="Center"  Width="100" Height="35" Command="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.LoadListCommand}">
                                <Grid Width="90">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="25"/>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>
                                    <Image Margin="0" VerticalAlignment="Center" HorizontalAlignment="Center"  Height="24" Width="24" Source="/GeneticsAdmin;component/Images/RefreshSmall.png" />
                                    <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="1">Обновить</TextBlock>
                                </Grid>
                            </Button>

                            <Button HorizontalAlignment="Left" Margin="180, 0, 0, 0" VerticalAlignment="Center"  Width="100" Height="35" Command="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.AddEntityCommand}">
                                <Grid Width="90">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="25"/>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>
                                    <Image Margin="0" VerticalAlignment="Center" HorizontalAlignment="Center"  Height="24" Width="24" Source="/GeneticsAdmin;component/Images/AddSmall1.png" />
                                    <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="1">Добавить</TextBlock>
                                </Grid>
                            </Button>

                            <Button HorizontalAlignment="Left" Margin="300, 0, 0, 0" VerticalAlignment="Center"  Width="100" Height="35" Command="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.DeleteEntityCommand}">
                                <Grid Width="90">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="25"/>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>
                                    <Image Margin="0" VerticalAlignment="Center" HorizontalAlignment="Center"  Height="24" Width="24" Source="/GeneticsAdmin;component/Images/DeleteSmall2.png" />
                                    <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="1">Удалить</TextBlock>
                                </Grid>
                            </Button>

                            <Button HorizontalAlignment="Left" Margin="470, 0, 0, 0" VerticalAlignment="Center"  Width="100" Height="35" Command="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.SaveCommand}">
                                <Grid Width="90">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="25"/>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>
                                    <Image Margin="0" VerticalAlignment="Center" HorizontalAlignment="Center"  Height="24" Width="24" Source="/GeneticsAdmin;component/Images/SaveSmall1.png" />
                                    <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="1">Сохранить</TextBlock>
                                </Grid>
                            </Button>

                            <DataGrid Grid.Row="1" 
                                      AutoGenerateColumns="False"
                                      HorizontalAlignment="Stretch"
                                      VerticalAlignment="Stretch"
                                      Margin="10, 0, 10, 10"
                                      RowHeaderWidth="0"
                                      CanUserAddRows="False"
                                      CanUserDeleteRows="False"
                                      CanUserResizeRows="False"
                                      SelectionMode="Single"
                                      ItemsSource="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.entityCollection}"
                                      SelectedItem="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.currentEntity}">
                                <DataGrid.Columns>
                                    <DataGridTextColumn Binding="{Binding Path=isNotSave, Converter={StaticResource notSaveParmConverter}}" CanUserResize="False" CanUserSort="False" Width="10" IsReadOnly="True" Header=""></DataGridTextColumn>
                                    <DataGridTextColumn Binding="{Binding Path=idRisk}" Width="60" IsReadOnly="True" Header="ID риска"></DataGridTextColumn>
                                    <DataGridTextColumn Binding="{Binding Path=descriptionRisk}" Width="*" IsReadOnly="True" Header="Описание риска"></DataGridTextColumn>

                                    <DataGridTextColumn Binding="{Binding Path=populationRiskLeftNorm}" Width="*">
                                        <DataGridTextColumn.Header>
                                            <TextBlock>
                                                Популяционная<LineBreak/>зона от
                                            </TextBlock>
                                        </DataGridTextColumn.Header>
                                    </DataGridTextColumn>

                                    <DataGridTextColumn Binding="{Binding Path=populationRiskRightNorm}" Width="*">
                                        <DataGridTextColumn.Header>
                                            <TextBlock>
                                                Популяционная<LineBreak/>зона до
                                            </TextBlock>
                                        </DataGridTextColumn.Header>
                                    </DataGridTextColumn>

                                    <DataGridTextColumn Binding="{Binding Path=averageRiskLeftNorm}" Width="*">
                                        <DataGridTextColumn.Header>
                                            <TextBlock>
                                                Умеренная<LineBreak/>зона от
                                            </TextBlock>
                                        </DataGridTextColumn.Header>
                                    </DataGridTextColumn>

                                    <DataGridTextColumn Binding="{Binding Path=averageRiskRightNorm}" Width="*">
                                        <DataGridTextColumn.Header>
                                            <TextBlock>
                                                Умеренная<LineBreak/>зона до
                                            </TextBlock>
                                        </DataGridTextColumn.Header>
                                    </DataGridTextColumn>

                                    <DataGridTextColumn Binding="{Binding Path=aboveAverageRiskLeftNorm}" Width="*">
                                        <DataGridTextColumn.Header>
                                            <TextBlock>
                                                Повышенная<LineBreak/>зона от
                                            </TextBlock>
                                        </DataGridTextColumn.Header>
                                    </DataGridTextColumn>

                                    <DataGridTextColumn Binding="{Binding Path=aboveAverageRiskRightNorm}" Width="*">
                                        <DataGridTextColumn.Header>
                                            <TextBlock>
                                                Повышенная<LineBreak/>зона до
                                            </TextBlock>
                                        </DataGridTextColumn.Header>
                                    </DataGridTextColumn>

                                    <DataGridTextColumn Binding="{Binding Path=highRiskLeftNorm}" Width="*">
                                        <DataGridTextColumn.Header>
                                            <TextBlock>
                                                Высокая<LineBreak/>зона от
                                            </TextBlock>
                                        </DataGridTextColumn.Header>
                                    </DataGridTextColumn>

                                    <DataGridTextColumn Binding="{Binding Path=highRiskRightNorm}" Width="*">
                                        <DataGridTextColumn.Header>
                                            <TextBlock>
                                                Высокая<LineBreak/>зона до
                                            </TextBlock>
                                        </DataGridTextColumn.Header>
                                    </DataGridTextColumn>
                                </DataGrid.Columns>
                            </DataGrid>

                        </Grid>
                    </GroupBox>

                    <GridSplitter
                        Visibility="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.risksMode, Converter={StaticResource risksModeVisibilityConverter}}"
                        Grid.Row="2" Height="3" HorizontalAlignment="Stretch" VerticalAlignment="Center"  ShowsPreview="False"/>
                    
                    <GroupBox Grid.Row="3" Header="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.risksMode, Converter={StaticResource groupBoxRiskHeaderConverter}}"  Margin="10, 5, 10, 5">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="50"/>
                                <RowDefinition Height="*"/>
                            </Grid.RowDefinitions>

                            <Button HorizontalAlignment="Left" Margin="10, 0, 0, 0" VerticalAlignment="Center"  Width="100" Height="35" Command="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.linkGeneticStudyRiskListViewModel.LoadListCommand}">
                                <Grid Width="90">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="25"/>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>
                                    <Image Margin="0" VerticalAlignment="Center" HorizontalAlignment="Center"  Height="24" Width="24" Source="/GeneticsAdmin;component/Images/RefreshSmall.png" />
                                    <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="1">Обновить</TextBlock>
                                </Grid>
                            </Button>

                            <Button HorizontalAlignment="Left" Margin="180, 0, 0, 0" VerticalAlignment="Center"  Width="100" Height="35" Command="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.linkGeneticStudyRiskListViewModel.AddEntityCommand}">
                                <Grid Width="90">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="25"/>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>
                                    <Image Margin="0" VerticalAlignment="Center" HorizontalAlignment="Center"  Height="24" Width="24" Source="/GeneticsAdmin;component/Images/AddSmall1.png" />
                                    <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="1">Добавить</TextBlock>
                                </Grid>
                            </Button>

                            <Button HorizontalAlignment="Left" Margin="300, 0, 0, 0" VerticalAlignment="Center"  Width="100" Height="35" Command="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.linkGeneticStudyRiskListViewModel.DeleteEntityCommand}">
                                <Grid Width="90">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="25"/>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>
                                    <Image Margin="0" VerticalAlignment="Center" HorizontalAlignment="Center"  Height="24" Width="24" Source="/GeneticsAdmin;component/Images/DeleteSmall2.png" />
                                    <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="1">Удалить</TextBlock>
                                </Grid>
                            </Button>

                            <Button HorizontalAlignment="Left" Margin="470, 0, 0, 0" VerticalAlignment="Center"  Width="100" Height="35" Command="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.linkGeneticStudyRiskListViewModel.SaveCommand}">
                                <Grid Width="90">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="25"/>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>
                                    <Image Margin="0" VerticalAlignment="Center" HorizontalAlignment="Center"  Height="24" Width="24" Source="/GeneticsAdmin;component/Images/SaveSmall1.png" />
                                    <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="1">Сохранить</TextBlock>
                                </Grid>
                            </Button>


                            <DataGrid Grid.Row="1" 
                                      AutoGenerateColumns="False"
                                      HorizontalAlignment="Stretch"
                                      VerticalAlignment="Stretch"
                                      Margin="10, 0, 10, 10"
                                      RowHeaderWidth="0"
                                      CanUserAddRows="False"
                                      CanUserDeleteRows="False"
                                      CanUserResizeRows="False"
                                      SelectionMode="Single"
                                      ItemsSource="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.linkGeneticStudyRiskListViewModel.entityCollection}"
                                      SelectedItem="{Binding Path=linkGeneticStudyIntegrationRiskListViewModel.linkGeneticStudyRiskListViewModel.currentEntity}">
                                <DataGrid.Columns>
                                    <DataGridTextColumn Binding="{Binding Path=isNotSave, Converter={StaticResource notSaveParmConverter}}" CanUserResize="False" CanUserSort="False" Width="10" IsReadOnly="True" Header=""></DataGridTextColumn>
                                    <DataGridTextColumn Binding="{Binding Path=idRisk}" Width="60" IsReadOnly="True" Header="ID риска"></DataGridTextColumn>
                                    <DataGridTextColumn Binding="{Binding Path=descriptionRisk}" Width="*" IsReadOnly="True" Header="Описание риска"></DataGridTextColumn>
                                    <DataGridCheckBoxColumn Binding="{Binding Path=showRiskToDoc}" Width="80" >
                                        <DataGridCheckBoxColumn.Header>
                                            <!--
                                            <Label Content="Показывать&#13;риск" TextBlock.TextAlignment="Center" Padding="0"/>
                                            -->
                                            <TextBlock TextAlignment="Center">
                                                Показывать<LineBreak/>риск
                                            </TextBlock>
                                        </DataGridCheckBoxColumn.Header>
                                    </DataGridCheckBoxColumn>

                                    <DataGridTextColumn Binding="{Binding Path=populationRiskLeftNorm}" Width="*">
                                        <DataGridTextColumn.Header>
                                            <TextBlock>
                                                Популяционная<LineBreak/>зона от
                                            </TextBlock>
                                        </DataGridTextColumn.Header>
                                    </DataGridTextColumn>

                                    <DataGridTextColumn Binding="{Binding Path=populationRiskRightNorm}" Width="*">
                                        <DataGridTextColumn.Header>
                                            <TextBlock>
                                                Популяционная<LineBreak/>зона до
                                            </TextBlock>
                                        </DataGridTextColumn.Header>
                                    </DataGridTextColumn>

                                    <DataGridTextColumn Binding="{Binding Path=averageRiskLeftNorm}" Width="*">
                                        <DataGridTextColumn.Header>
                                            <TextBlock>
                                                Умеренная<LineBreak/>зона от
                                            </TextBlock>
                                        </DataGridTextColumn.Header>
                                    </DataGridTextColumn>

                                    <DataGridTextColumn Binding="{Binding Path=averageRiskRightNorm}" Width="*">
                                        <DataGridTextColumn.Header>
                                            <TextBlock>
                                                Умеренная<LineBreak/>зона до
                                            </TextBlock>
                                        </DataGridTextColumn.Header>
                                    </DataGridTextColumn>

                                    <DataGridTextColumn Binding="{Binding Path=aboveAverageRiskLeftNorm}" Width="*">
                                        <DataGridTextColumn.Header>
                                            <TextBlock>
                                                Повышенная<LineBreak/>зона от
                                            </TextBlock>
                                        </DataGridTextColumn.Header>
                                    </DataGridTextColumn>

                                    <DataGridTextColumn Binding="{Binding Path=aboveAverageRiskRightNorm}" Width="*">
                                        <DataGridTextColumn.Header>
                                            <TextBlock>
                                                Повышенная<LineBreak/>зона до
                                            </TextBlock>
                                        </DataGridTextColumn.Header>
                                    </DataGridTextColumn>

                                    <DataGridTextColumn Binding="{Binding Path=highRiskLeftNorm}" Width="*">
                                        <DataGridTextColumn.Header>
                                            <TextBlock>
                                                Высокая<LineBreak/>зона от
                                            </TextBlock>
                                        </DataGridTextColumn.Header>
                                    </DataGridTextColumn>

                                    <DataGridTextColumn Binding="{Binding Path=highRiskRightNorm}" Width="*">
                                        <DataGridTextColumn.Header>
                                            <TextBlock>
                                                Высокая<LineBreak/>зона до
                                            </TextBlock>
                                        </DataGridTextColumn.Header>
                                    </DataGridTextColumn>
                                </DataGrid.Columns>
                            </DataGrid>

                        </Grid>
                    </GroupBox>
                    
                </Grid>
            </TabItem>
...
Рейтинг: 0 / 0
GridSplitter и Binding
    #38964141
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg5555,

еще бы на конвертер глянуть gridRowRiskHeightConverter
и на перечисление которое вы передает в параметр.
а вообще по факту

и нормально опишите, какого поведения вы хотите добиться.

и как я уже писал GridSlitter не должен находится в собственной строке, он должен быть расположен в той строке, размер которой предполагается изменять.
Так же желательно, чтоб размер изменяемый строк был "Star" со звёздочкой, тогда при изменении размера всё должно быть нормально

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<Window x:Class="WpfApplication15.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        DataContext="{StaticResource MainModel}">
    <Grid x:Name="Grid">
        <Grid.RowDefinitions>
            <RowDefinition Height="65"/>
            <RowDefinition Height="{Binding Row1, Mode=TwoWay}"/>
            <RowDefinition Height="{Binding Row2, Mode=TwoWay}"/>
        </Grid.RowDefinitions>
        
        <Border Grid.Row="1" Background="Orange" Margin="2">
            <TextBlock Text="{Binding RowDefinitions[1].Height, ElementName=Grid }"></TextBlock>
        </Border>
        <Border Grid.Row="2" Background="Olive" Margin="2">
            <TextBlock Text="{Binding RowDefinitions[2].Height, ElementName=Grid }"></TextBlock>
        </Border>
        <GridSplitter Grid.Row="2"  Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Top" Background="Navy" BorderBrush="Black" ResizeDirection="Rows"/>
    </Grid>
</Window>



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
    public class MainModel
    {
        public GridLength Row1
        {
            set
            {
                Properties.Settings.Default.RowHeight1 = value.Value;
                Properties.Settings.Default.Save();
            }
            get
            {
                return new GridLength(Properties.Settings.Default.RowHeight1, GridUnitType.Star);
            }
        }
        public GridLength Row2
        {
            set
            {
                Properties.Settings.Default.RowHeight2 = value.Value;
                Properties.Settings.Default.Save();
            }
            get
            {
                return new GridLength(Properties.Settings.Default.RowHeight2, GridUnitType.Star);
            }
        }
    }


вот пример, у меня значения сохраняются через модель представления в Setting'ах, соответствующие параметры типа double есть в настройках проекта.
всё отлично работает.
Если вы сделайте поле Auto, то из Auto при изменении размера оно превратиться в тип Pixel
...
Рейтинг: 0 / 0
GridSplitter и Binding
    #38964314
Oleg5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Конвертер простой. Просто он возвращает не GridLength. но так все работает. Проблема в другом.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
class GridRowRiskHeightConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            Double                          ret             = Double.NaN;
            GridRowRiskHeightConverterMode  converterMode   = (GridRowRiskHeightConverterMode)parameter;

            RisksMode riskMode = (RisksMode)value;

            switch (riskMode)
            {
                case RisksMode.IntegrationRisks:
                    
                    ret = Double.PositiveInfinity;
                    break;

                case RisksMode.DifRisks:

                    switch (converterMode)
                    {
                        case GridRowRiskHeightConverterMode.Normal:
                            ret = Double.NaN;
                            break;

                        case GridRowRiskHeightConverterMode.AnlyInfinity:
                            ret = Double.PositiveInfinity;
                            break;
                    }
                    
                    break;
            }

            return ret;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotSupportedException();
        }
    }



Перечисление в качестве параметра это так, дополнительно, я уже пытался что-то придумать. Суть конвертера в том, что он для значения riskMode.IntegrationRisks возвращает высоту "*" (GridUnitType.Star) , а для значения riskMode.DiffRisks - Auto. А если параметр равен GridRowRiskHeightConverterMode.AnlyInfinity, то всегда "*".
В какой строке находится сплитер, в данном, случае не принципиально. У меня в отдельной. В режиме когда сплитер отображается, высота соотвествующих строк для масштабирования "*". С этим все нормально.

Поведения я хочу следующего. В режиме riskMode.IntegrationRisks отображается два dataGrid. Между ними сплитер. Можно ресайзить. dataGrid-ы в этом случае работают как строка шапки и к ней связанные подстроки.
В режиме riskMode.DiffRisks должен отображаться только нижний dataGrid. Он строиться наполняется по своему. Верхний dataGrid и сплитер должны скрываться, а нижний растягиваться на все доступное пространство.
Такая логика отрабатывает, если нет сплитера или если его не трогать в первом режиме. Если перетащить сплитер в первом режиме, то бинги со строк grid пропадут и необходима логика отображения не будет работать.
...
Рейтинг: 0 / 0
GridSplitter и Binding
    #38964351
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно попробовать другие походы:
создайте контрол, задайте ему шаблон, свойства для DataGrid'ов, в шаблоне в триггерах определите при каком значении поля riskMode Какие строки грида видны, включая сплиттер. Зачем вам для этого биндинг на высоту строк?
по сути (как я понял) данная страница имеет 2 состояния, которые зависят от значения RiskMode, вот вы в зависимости от состояния и будете с помощью триггера это менять.
не всегда Binding удобен.
То есть надо:
а) создать контрол и задать все DP которые вы будите передавать из ViewModel в View (типа списков для DataGrid'ов), свойство определяющее состояние (riskMode)
б) создать шаблон, в шаблоне задать Grid со сплиттером шапку можно оставить снаружи)
в) в гриде разместить ваши DataGrid и забиндить те свойства которые вы передаете (списки и т.д.)
г) в <ControlTemplate.Trigger> создать триггер на свойство которое вы определили в пукнте а) определяющее состояние и сеттеры которые будут меня значения для Grid'а.
...
Рейтинг: 0 / 0
GridSplitter и Binding
    #38964369
Oleg5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Биндинг на высоту строк нужен для того, чтобы при установке у верхнего блока visibility = Visibility.Collapsed по биндингу высота строки грида установилась в auto и при такой конфигурации строка грида с верхнем скрытым блоком схлопнется до нуля. А нижний блок растянется на все доступное пространство.
Видимо нужно искать какие-то другие подходы. Пока еще картина не сложилась. Буду капать дальше.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / GridSplitter и Binding
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]