我有一个网格,位于名为 MediatedUserControl 的用户控件派生类内。我添加了一个上下文菜单来让用户删除一个项目,但我一直无法弄清楚如何将命令绑定到我的命令属性。我正在使用 MVVM,并且我的视图模型实现了一个名为 DeleteSelectedItemCommand 的公共 ICommand 属性。
但是,当显示视图时,我在输出窗口中收到以下消息:
System.Windows.Data 错误:4:无法找到引用“RelativeSource FindAncestor、AncestorType='BRO.View.MediatedUserControl”、AncestorLevel='1'' 进行绑定的源。BindingExpression:Path=DataContext.DeleteSelectedItemCommand; 数据项=空;目标元素是“BarButtonItem”(HashCode=6860584);目标属性是“Command”(类型“ICommand”)
我觉得我通常可以很好地处理这样的绑定,但无法弄清楚我在这里缺少什么。感谢您的任何帮助,您可以提供。
<dxg:GridControl HorizontalAlignment="Left" Margin="12,88,0,0" x:Name="gridControl1" VerticalAlignment="Top" Height="500" Width="517" DataSource="{Binding ItemList}" BorderBrush="{StaticResource {x:Static SystemColors.ActiveBorderBrushKey}}" ShowBorder="True" Background="{StaticResource {x:Static SystemColors.ControlLightBrushKey}}" UseLayoutRounding="False" DataContext="{Binding}">
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="Code" Header="Code" Width="107" />
<dxg:GridColumn FieldName="Name" Header="Item" Width="173" />
<dxg:GridColumn FieldName="PricePerItem" Header="Unit Price" Width="70">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="N2" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn FieldName="Quantity" Header="Qty" Width="50" AllowEditing="True" />
<dxg:GridColumn FieldName="TotalPrice" Header="Total Price" Width="90">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="N2" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView ShowIndicator="False" ShowGroupPanel="False" MultiSelectMode="Row" AllowColumnFiltering="False" AllowBestFit="False" …
Run Code Online (Sandbox Code Playgroud) 如何将字符串值绑定Y
到N
isEnabled 值?
<TextBox IsEnabled="{Binding Path=StringValueFromSomeEntity, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
Run Code Online (Sandbox Code Playgroud)
StringValueFromSomeEntity 可以是一个Y
或N
值。
在我的资源字典中,我有以下样式:
<Style TargetType="{x:Type propgrid:PropertyGridDataAccessorItem}" x:Key="{x:Type propgrid:PropertyGridDataAccessorItem}">
<Style.Triggers>
<Trigger Property="DataAccessorType" Value="Category">
<Setter Property="IsExpanded" Value="{Binding DisplayName, Converter={local:ExpandedCategoryConverter}}"/>
</Trigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
我需要将 viewModel 中的值绑定到 ConverterParameter,例如 ConverterParameter = {Binding MyProperty},但我们无法绑定到 ConverterParameter。
我该如何解决这个问题?
提前谢谢
在我的窗口中,我有一系列六个按钮,它们指示我的 ViewModel 属性之一的六种可能状态。需要突出显示处于活动状态的那个。为此,我为按钮创建了以下 ControlTemplate:
<ControlTemplate x:Key="SnijRichtingTemplate" TargetType="Button">
<Border Name="toggleButton" BorderThickness="1" BorderBrush="{StaticResource KleurRadioCheckOuter}" Background="Transparent" Width="20" Height="20" Cursor="Hand">
<TextBlock Name="text" Foreground="{StaticResource KleurRadioCheckOuter}"
Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Tag}"
ToolTip="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Tag.ToolTip}"
HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
<ControlTemplate.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource EqualityToBooleanConverter}">
<Binding Path="SnijRichting" />
<Binding Path="Tag" RelativeSource="{RelativeSource TemplatedParent}" />
</MultiBinding>
</DataTrigger.Binding>
<Setter TargetName="toggleButton" Property="BorderBrush" Value="{StaticResource KleurTekstDonker}" />
<Setter TargetName="text" Property="Foreground" Value="{StaticResource KleurTekstDonker}" />
</DataTrigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="toggleButton" Property="BorderBrush" Value="{StaticResource Kleur2}" />
<Setter TargetName="text" Property="Foreground" Value="{StaticResource Kleur2}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate> …
Run Code Online (Sandbox Code Playgroud) 我有 QVariantMap (不是 QObject,因为属性名称没有预定义)。我将 QVariantMap 注入到 QML 根上下文中以使用属性值进行绑定。
问题是,当我更改 QVariantMap 或什至当我更改 QVariantMap 并为更新的对象调用 setContextProperty 时,或者当我更新(使用 fromValue) contextProperty 返回的对象时,什么也没有发生。所以这看起来像是一次性绑定。
那么,以可观察的方式将 Map 或 Map 注入 QML 上下文中的正确方法是什么,以便映射中的更改项目将反映在 QML 中?
在我的 JavaFX 项目中,我包含了一个使用Linear.Flow
. 对于我的 WizardPane 之一,我希望将Next
按钮的禁用属性绑定到布尔属性。(更具体地说,如果文本字段为空,则应禁用该按钮)。
但是,我无法找到任何解决方案。(此处提供的可能解决方案对我不起作用)。
这是我的向导窗格:
private WizardPane getName() {
TextField textField = new TextField();
textField.requestFocus();
final WizardPane namePane = new WizardPane();
namePane.setHeaderText("Choose Name for File");
final GridPane grid = new GridPane();
grid.add(new Label("File Name:"), 0, 0);
grid.add(textField, 1, 0);
namePane.setContent(grid);
return namePane;
}
Run Code Online (Sandbox Code Playgroud)
我绑定disabled属性的失败尝试如下:
@Override
public void onEnteringPage(Wizard wizard) {
this.getButtonTypes()
.stream()
.filter(type -> type.getButtonData().equals(ButtonBar.ButtonData.NEXT_FORWARD))
.map(this::lookupButton)
.findFirst()
.ifPresent(next -> next.disableProperty().bind(textField.textProperty().isEmpty()));
}
Run Code Online (Sandbox Code Playgroud)
任何建议都非常感激。谢谢!
我尝试做这样的事情
pair<int, int> f() {
return {1, 2};
}
int a, b;
[a, b] = f();
Run Code Online (Sandbox Code Playgroud)
并得到编译错误。所有错误都归结为一个事实,即编译器认为它是一个语法错误的 lambda。所以如果我使用结构化绑定,我总是应该写auto
?
StepsEntity是核心数据实体
尝试在 TextField 中显示字符串值时收到以下错误:“无法将类型 'Published<[StepsEntity]>.Publisher' 的值转换为预期参数类型 'Binding'”
我知道这是因为我的核心数据模型中的 StepsEntity 是 @Published。@Published 在这里效果很好,因为它允许整齐地更新所有数据。如何在文本字段中显示@Published?
以下是我收到错误的部分:
List {
VStack(alignment: .center) {
if let recipeSteps = (vm.recipes[vm.getRecordsCount() - 1].steps?.allObjects as? [StepsEntity])?.sorted { $0.stepNumber < $1.stepNumber } {
if (textFieldCount == 1) {
//do nothing
} else if (textFieldCount > 1) {
ForEach(recipeSteps, id: \.stepNumber) { index in
HStack {
Text(String(index.stepNumber) + ".").bold()
TextField("", text: vm.$recipeSteps) //This is where the error is seen
}
}.onDelete(perform: { index in
self.vm.deleteRecipeSteps(at: index, from: vm.recipes[vm.getRecordsCount() - 1])
}) …
Run Code Online (Sandbox Code Playgroud) 我有这个功能:
map(\x -> l ++ [x]) "Show" where l = ""
Run Code Online (Sandbox Code Playgroud)
我想在地图函数的每一步保存l的值(例如我不想返回["S","h","o","w"]
,我希望它返回["S","Sh","Sho","Show"]
)
有人能帮我吗?
在我的View模型中,我有以下属性:
public Visibility IsModelBusy { get; set; }
Run Code Online (Sandbox Code Playgroud)
我有一个很长的处理任务:
private void DoSomething(object obj)
{
IsModelBusy = Visibility.Visible;
OnPropertyChanged("IsModelBusy");
DoHeavyWork();
IsModelBusy = Visibility.Collapsed;
OnPropertyChanged("IsModelBusy");
}
Run Code Online (Sandbox Code Playgroud)
我有一个绑定到的UI元素IsModelBusy
:
<Border Visibility="{Binding IsModelBusy, UpdateSourceTrigger=PropertyChanged}">
...
</Border>
Run Code Online (Sandbox Code Playgroud)
问题 我的边框永远不可见,主窗口挂起,而繁重的任务正在进行中(我无法在后台线程中运行)我尝试在传递给调度程序的操作中包装属性更改调用,没有运气,问题仍然存在仍然存在.
现在,如果我这样做:
private void DoSomething(object obj)
{
IsModelBusy = Visibility.Visible;
OnPropertyChanged("IsModelBusy");
MessageBox.Show("What the..."); <=========
DoHeavyWork();
IsModelBusy = Visibility.Collapsed;
OnPropertyChanged("IsModelBusy");
}
Run Code Online (Sandbox Code Playgroud)
随着介绍MessageBox
,UI似乎处理属性更改事件并正确更新.
问题
如果不使用后台任务,我如何强制UI处理PropertyChanged
事件?