在WPF中,我想创建一个导航到对象细节的超链接,我希望超链接的文本是对象的名称.现在,我有这个:
<TextBlock><Hyperlink Command="local:MyCommands.ViewDetails" CommandParameter="{Binding}">Object Name</Hyperlink></TextBlock>
Run Code Online (Sandbox Code Playgroud)
但我希望"对象名称"绑定到对象的实际名称.我想做这样的事情:
<TextBlock><Hyperlink Command="local:MyCommands.ViewDetails" CommandParameter="{Binding}" Text="{Binding Path=Name}"/></TextBlock>
Run Code Online (Sandbox Code Playgroud)
但是,Hyperlink类没有适合数据绑定的文本或内容属性(即依赖项属性).
有任何想法吗?
AngularJS可以做的一件有趣的事情是将过滤器应用于特定的数据绑定表达式,这是一种应用的便捷方式,例如,特定于文化的货币或模型属性的日期格式.在范围上计算属性也很好.问题是这些功能都不适用于双向数据绑定方案 - 只是从范围到视图的单向数据绑定.这在一个优秀的图书馆中似乎是一个明显的遗漏 - 或者我错过了什么?
在KnockoutJS中,我可以创建一个读/写计算属性,它允许我指定一对函数,一个被调用以获取属性的值,另一个在设置属性时被调用.这允许我实现,例如,文化感知输入 - 让用户键入"$ 1.24"并将其解析为ViewModel中的浮点数,并在输入中反映ViewModel中的更改.
我能找到的最接近的东西是使用$scope.$watch(propertyName, functionOrNGExpression);这个允许我在$scope更改属性时调用一个函数.但这并不能解决例如文化意识的输入问题.当我尝试$watched在$watch方法本身中修改属性时,请注意问题:
$scope.$watch("property", function (newValue, oldValue) {
$scope.outputMessage = "oldValue: " + oldValue + " newValue: " + newValue;
$scope.property = Globalize.parseFloat(newValue);
});
Run Code Online (Sandbox Code Playgroud)
(http://jsfiddle.net/gyZH8/2/)
当用户开始输入时,输入元素变得非常混乱.我通过将属性拆分为两个属性来改进它,一个用于未解析的值,另一个用于解析的值:
$scope.visibleProperty= 0.0;
$scope.hiddenProperty = 0.0;
$scope.$watch("visibleProperty", function (newValue, oldValue) {
$scope.outputMessage = "oldValue: " + oldValue + " newValue: " + newValue;
$scope.hiddenProperty = Globalize.parseFloat(newValue);
});
Run Code Online (Sandbox Code Playgroud)
(http://jsfiddle.net/XkPNv/1/)
这是对第一个版本的改进,但是有点冗长,并注意到parsedValue范围更改的属性仍然存在问题(在第二个输入中键入内容,parsedValue直接更改.注意顶部输入不更新).这可能发生在控制器操作或从数据服务加载数据. …
我的WPF应用程序生成的数据集可能每次都有不同的列数.输出中包含将用于应用格式的每列的说明.输出的简化版本可能类似于:
class Data
{
IList<ColumnDescription> ColumnDescriptions { get; set; }
string[][] Rows { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
此类在WPF DataGrid上设置为DataContext,但实际上我以编程方式创建列:
for (int i = 0; i < data.ColumnDescriptions.Count; i++)
{
dataGrid.Columns.Add(new DataGridTextColumn
{
Header = data.ColumnDescriptions[i].Name,
Binding = new Binding(string.Format("[{0}]", i))
});
}
Run Code Online (Sandbox Code Playgroud)
有没有办法用XAML文件中的数据绑定替换此代码?
我想编写一个ViewModel,它始终知道View中某些只读依赖项属性的当前状态.
具体来说,我的GUI包含一个FlowDocumentPageViewer,它一次从FlowDocument显示一个页面.FlowDocumentPageViewer公开了两个名为CanGoToPreviousPage和CanGoToNextPage的只读依赖项属性.我希望我的ViewModel始终知道这两个View属性的值.
我想我可以使用OneWayToSource数据绑定来做到这一点:
<FlowDocumentPageViewer
CanGoToNextPage="{Binding NextPageAvailable, Mode=OneWayToSource}" ...>
Run Code Online (Sandbox Code Playgroud)
如果这是允许的,那将是完美的:每当FlowDocumentPageViewer的CanGoToNextPage属性发生更改时,新值将被推送到ViewModel的NextPageAvailable属性,这正是我想要的.
不幸的是,这不编译:我收到一个错误,说'CanGoToPreviousPage'属性是只读的,不能从标记设置.显然只读属性不支持任何类型的数据绑定,甚至不支持与该属性相关的只读数据绑定.
我可以让我的ViewModel的属性为DependencyProperties,并使OneWay绑定以另一种方式运行,但我并不为关注点分离违规而疯狂(ViewModel需要对View的引用,MVVM数据绑定应该避免).
FlowDocumentPageViewer不公开CanGoToNextPageChanged事件,我不知道从DependencyProperty获取更改通知的任何好方法,没有创建另一个DependencyProperty来绑定它,这在这里看起来有点过分.
如何让ViewModel了解视图的只读属性的更改?
我有一种情况需要显示一个整数值,绑定到我的数据上下文中的属性,然后通过两次单独的转换:
我意识到我可以通过创建自己的转换器(实现IValueConverter)来完成这两个步骤.但是,我已经有一个单独的值转换器,只执行第一步,第二步由Int32Converter覆盖.
有没有办法在XAML中链接这两个现有的类而不必创建另一个聚合它们的类?
如果我需要澄清这些,请告诉我.:)
谢谢.
我以这种方式从表单发送一些参数:
myparam[0] : 'myValue1'
myparam[1] : 'myValue2'
myparam[2] : 'myValue3'
otherParam : 'otherValue'
anotherParam : 'anotherValue'
...
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过添加一个参数来获得控制器方法中的所有参数
public String controllerMethod(@RequestParam Map<String, String> params){
....
}
Run Code Online (Sandbox Code Playgroud)
我想将参数myParam [](而不是其他的)绑定到列表或数组(保持索引顺序的任何东西),所以我尝试使用如下语法:
public String controllerMethod(@RequestParam(value="myParam") List<String> myParams){
....
}
Run Code Online (Sandbox Code Playgroud)
和
public String controllerMethod(@RequestParam(value="myParam") String[] myParams){
....
}
Run Code Online (Sandbox Code Playgroud)
但它们都没有约束myParams.即使我向地图添加了一个值,它也无法绑定参数:
public String controllerMethod(@RequestParam(value="myParam") Map<String, String> params){
....
}
Run Code Online (Sandbox Code Playgroud)
是否有任何语法将一些参数绑定到列表或数组而不必创建一个具有列表属性的@ModelAttribute对象?
谢谢
如何将按钮的可见性绑定到ViewModel中的bool值?
<Button Height="50" Width="50" Style="{StaticResource MyButtonStyle}"
Command="{Binding SmallDisp}" CommandParameter="{Binding}" Cursor="Hand"
Visibility="{Binding Path=AdvancedFormat}" />
Run Code Online (Sandbox Code Playgroud) 在WPF中,您可以使用ExceptionValidationRule或在数据绑定期间根据数据层中抛出的错误设置验证DataErrorValidationRule.
假设你有一堆这样设置的控件,你有一个Save按钮.当用户单击"保存"按钮时,您需要确保在继续保存之前没有验证错误.如果存在验证错误,您希望对它们大声疾呼.
在WPF中,如何确定是否有任何数据绑定控件设置了验证错误?
我有一个WPF 4应用程序,其中包含一个TextBlock,它具有一个单向绑定到一个整数值(在这种情况下,温度为摄氏度).XAML看起来像这样:
<TextBlock x:Name="textBlockTemperature">
<Run Text="{Binding CelsiusTemp, Mode=OneWay}"/></TextBlock>
Run Code Online (Sandbox Code Playgroud)
这适用于显示实际温度值,但我想格式化这个值,因此它包括°C而不是数字(30°C而不是30°).我一直在阅读有关StringFormat的文章,我看过几个这样的通用例子:
// format the bound value as a currency
<TextBlock Text="{Binding Amount, StringFormat={}{0:C}}" />
Run Code Online (Sandbox Code Playgroud)
和
// preface the bound value with a string and format it as a currency
<TextBlock Text="{Binding Amount, StringFormat=Amount: {0:C}}"/>
Run Code Online (Sandbox Code Playgroud)
不幸的是,我所看到的所有例子都没有在我试图做的事情中附加一个字符串到绑定值.我敢肯定它必须简单但我找不到任何运气.任何人都可以向我解释如何做到这一点?
将"当前"传递$scope给AngularJS服务是否正确?
我正处于这样一种情况,我知道它仅由一个控制器消耗,并且我希望在$ service方法本身中引用控制器的范围.
这在哲学上是否正确?
或者我最好将事件广播到$ rootScope然后让我的控制器听取它们?
data-binding ×10
wpf ×7
xaml ×4
c# ×3
angularjs ×2
collections ×1
datagrid ×1
hyperlink ×1
java ×1
javascript ×1
mvvm ×1
readonly ×1
spring ×1
spring-mvc ×1
validation ×1