我有一个有几行的网格.在顶行,我有一个ItemsControl动态绑定到一个集合,并使用DataTemplateSelector和ItemsPanelTemplate(与一个水平排列的WrapPanel).这是我到目前为止的精简版:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="40" />
<RowDefinition Height="2" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<GridSplitter Background="#666" Grid.Row="1" Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
<ItemsControl x:Name="items" Background="#DDD" Grid.Row="0" ItemTemplateSelector="{StaticResource itemTemplateSelector}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
Run Code Online (Sandbox Code Playgroud)
我不想将第一行的高度设置为40,而是根据ItemsControl必须适合其所有内容的最小高度动态设置它.由于ItemsControl的高度受Grid Row高度的限制,我无法弄清楚我应该绑定哪个元素以及我应该将它绑定到哪个元素的属性.
将Grid Row的Height绑定到ItemsControl的"所需高度"是有意义的.所以,我找到了DesiredSize属性并将我的RowDefinition的高度绑定到ItemsControl的DesiredSize.Height.这在第一次加载时有效,但在我调整控件大小时不会更新(记住,我使用WrapPanel作为我的ItemsPanelTemplate,因此当我调整窗口大小时,ItemsControl的高度应该更改).
有没有人知道绑定框架是否支持这种情况,还是需要添加事件处理程序代码才能实现这一点?
谢谢.
我有一组复选框,它们都代表相同类型的不同选择(对于我的例子,它们都是不同的文件类型).我觉得将每个属性绑定到ViewModel中的单个属性是过度的,我更喜欢将它们全部绑定到一个集合,并使用绑定语法将每个复选框绑定到集合中的特定项目.我试图坚持MVVM模式,所以我不只是想变得懒惰并处理Checked事件或类似的东西.
有没有办法使用WPF绑定语法表达集合中的路径或键?例如,如果我Dictionary<string, bool>在ViewModel中将一个名为FileTypes的公共属性公开,有没有办法将其中一个复选框绑定到FileTypes ["aspx"]?如果我有更复杂的数据结构Dictionary<string, Dictionary<string, int>>怎么办?
有没有办法检测绑定何时更改?我不是在询问价值,我的意思是绑定表达本身.
我在WPFappcation中使用DataBinding了一个comboBox.projectList中的ProjectName应该在我的内部添加comboBox,但是当我运行应用程序时,每次我都会收到这些错误;
System.Windows.Data错误:40:BindingExpression路径错误:'object'''DayView'(Name ='MainWin')'上找不到'projectList'属性.BindingExpression:路径= projectList; DataItem ='DayView'(Name ='MainWin'); target元素是'ComboBox'(Name =''); 目标属性是'ItemsSource'(类型'IEnumerable')System.Windows.Data错误:40:BindingExpression路径错误:'object'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' BindingExpression:路径= selectedProjectid; DataItem ='ComboBox'(Name =''); target元素是'ComboBox'(Name =''); target属性是'SelectedValue'(类型'Object')
我使用数据绑定的xaml代码是:
<DataTemplate x:Key="EditableDataTemplate">
<StackPanel Orientation="Horizontal" Width="596">
<TextBox Text="{Binding ClientNameBinding}" Background="Yellow" Padding="0" Margin="0" BorderThickness="0" TextWrapping="Wrap" Width="145"/>
<TextBox Text="{Binding ApplicationNameBinding}" Background="Yellow" Padding="0" Margin="0" BorderThickness="0" TextWrapping="Wrap" Width="90"/>
<TextBox Text="{Binding StartTimeBinding}" Background="Yellow" Padding="0" Margin="0" BorderThickness="0" TextWrapping="Wrap" Width="100"/>
<TextBox Text="{Binding StopTimeBinding}" Background="Yellow" Padding="0" Margin="0" BorderThickness="0" TextWrapping="Wrap" Width="60"/>
<TextBox Text="{Binding TaskNameBinding}" Background="Yellow" Padding="0" Margin="0" BorderThickness="0" TextWrapping="Wrap" Width="130"/>
<ComboBox x:Name="ComboBox2" ItemsSource="{Binding …Run Code Online (Sandbox Code Playgroud) wpf ×3
c# ×2
.net ×1
data-binding ×1
itemscontrol ×1
mvvm ×1
resize ×1
silverlight ×1
wrappanel ×1
xaml ×1