我一直遇到Caliburn 有时在View Model上设置属性的问题,但并不总是触发Setter。在更改DataGrid中的属性时,它可能会绑定回我的View Model。
当我删除Virtualization
属性时,它似乎根本不起作用。
我的SettingsView.xaml
<DataGrid ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
Height="150"
ItemsSource="{Binding AbilitySettingViewModels}"
AutoGenerateColumns="False" VirtualizingPanel.IsVirtualizing="False"
AlternatingRowBackground="WhiteSmoke">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Ability ID" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox cal:Bind.ModelWithoutContext="{Binding}" Text="{Binding Id}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Custom image" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox cal:View.Context="{Binding}" cal:Bind.ModelWithoutContext="{Binding}" Text="{Binding Image}" ToolTip="Provide a custom image to use for this Ability." />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Ability Border" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<xctk:ColorPicker cal:View.Context="{Binding}" cal:Bind.ModelWithoutContext="{Binding}" ColorMode="ColorPalette" SelectedColor="{Binding Border, Mode=TwoWay}" DisplayColorAndName="True" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Delete" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button cal:Action.TargetWithoutContext="{Binding}" Padding="10,6" Content="Delete" cal:Message.Attach="Delete" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
我的SettingsViewModel
包含以下属性
// AbilitySettingViewModel is a row Item in the DataGrid
public BindableCollection<AbilitySettingViewModel> AbilitySettingViewModels { get; set; }
我已经尝试了所有cal:Bind
和cal:View
选项,看看是否有任何选项对<DataTemplate>
中的每个控件产生了影响,但似乎没有工作
最初我只有{Binding ViewModelProperty}
但它没有用。然后看到另一个DataGrid问题并设法通过添加Action.TargetWithoutContext="{Binding}"
让Button在我的视图模型上触发该方法。但是其他列中的其他属性仍然没有运气。
是否存在任何已知的问题或解决方法以使校准与DataGrid一起使用?
我正在使用Caliburn.micro 2.0.2。
Full SettingsView.xaml
here (Gist link)
Full SettingsViewModel.cs
here (Gist link)
Full AbilitySettingViewModel.cs
here (Gist link)
事件在正常设置下触发正常。当设置更改时,这将完全序列化为settings.json文件。它似乎也正在加载settings.json,即使对于被序列化的子视图模型(AbilitySettingsViewModel),它们似乎也被加载到DataGrid中并且设置了正确的值...只是编辑它们不起作用。
使用“删除”按钮工作正常,序列化将删除项目,该项目按预期工作。
答案 0 :(得分:0)
无需尝试自定义校准绑定。所有需要设置的都是Path=PROPERTY
。