我们有一个带有标准MVVM模式的WPF应用程序,利用Cinch(以及MefedMVVM)进行View - > ViewModel解析.这很好用,我可以将相关控件绑定到ViewModel上的属性.
在特定的视图中,我们有一个Infragistics XamGrid.此网格绑定到ViewModel上的ObservableCollection,并显示相应的行.但是,我在这个网格上有一个特定的列,我试图将TextBox文本值绑定到父DataContext上的属性,而不是ObservableCollection.这种绑定失败了.
我们在这里经历了几个选项,包括:
使用AncestorType跟踪树并绑定到父UserControl的DataContext,如此(从这个问题的答案很好,以及这个)...
{Binding Path=PathToProperty, RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}
Run Code Online (Sandbox Code Playgroud)指定ElementName并尝试直接定位顶级控件.有一个看看这里,如果你想了解使用的ElementName.
使用UserControl资源中定义的"代理"FrameorkElement尝试根据需要"传入"上下文.我们将元素定义如下,然后作为静态资源引用...
<FrameworkElement x:Key="ProxyContext" DataContext="{Binding Path=DataContext, RelativeSource={RelativeSource Self}}"></FrameworkElement>
Run Code Online (Sandbox Code Playgroud)在这种情况下,绑定会找到FrameworkElement,但不能访问除此之外的任何内容(指定Path时).
阅读之后,很可能这是由树外的Infragistics XamGrid构建列引起的.但是,即使是这种情况,至少应该选择2或3.
我们最后的想法是它与V-VM绑定有关,但即使使用Snoop,我们还没有找到确切的问题.我绝不是WPF绑定的专家所以任何指针都会受到赞赏.
编辑:我在这里找到了一些来自Infragistics的模板示例,我将尝试.
编辑2:正如@Dtex所指出的,模板是可行的方法.以下是与XamGrid一起使用的相关代码段:
<ig:GroupColumn Key="CurrentDate">
<ig:GroupColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=DataContext.CurrentDateTest, RelativeSource={RelativeSource AncestorType=UserControl}}" />
</DataTemplate>
</ig:GroupColumn.HeaderTemplate>
<ig:GroupColumn.Columns>
Run Code Online (Sandbox Code Playgroud)
我已经打开了XML ...你只需要添加你想要的列,然后关闭相关的标签.
我有一个描述GUI部分的WPF xaml文件,我希望特定控件的启用/禁用依赖于其他两个控件.代码看起来像这样:
<ComboBox Name="MyComboBox"
IsEnabled="{Binding ElementName=SomeCheckBox, Path=IsChecked}"/>
Run Code Online (Sandbox Code Playgroud)
但我希望它依赖于另一个复选框,所以类似于:
<ComboBox Name="MyComboBox"
IsEnabled="{Binding ElementName=SomeCheckBox&AnotherCheckbox, Path=IsChecked}"/>
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?我情不自禁地觉得我错过了一些明显的东西或者错误的方式?
是否可以绑定到Silverlight 4.0中的ConverterParameter?
例如,我想做类似的事情,并将ConverterParameter绑定到ViewModel中的对象.
如果不可能,还有其他选择吗?
<RadioButton
Content="{Binding Path=Mode}"
IsChecked="{Binding
Converter={StaticResource ParameterModeToBoolConverter},
ConverterParameter={Binding Path=DataContext.SelectedMode,ElementName=root}}"
/>
Run Code Online (Sandbox Code Playgroud) 语言绑定如何工作?
例如,如何将用一种语言编写的库中的绑定转换为另一种语言?绑定是否用与库或绑定语言相同的语言编写?
是否可以与所有语言进行绑定或者语言是否必须以某种方式支持绑定?如果是这种情况,那么这种支持如何运作?
将属性绑定到控件的最佳方法是什么,以便在更改属性值时,控件的绑定属性随之更改.
所以,如果我有一个属性FirstName,我想绑定到文本框的txtFirstName文本值.因此,如果我更改FirstName为值"Stack",则属性txtFirstName.Text也会更改为值"Stack".
我知道这可能听起来是一个愚蠢的问题,但我会感谢你的帮助.
我想知道在绑定时是否有可能使用knockoutjs来传递参数.
我绑定了一个复选框列表,并希望绑定到我的viewmodel中的单个计算observable.在我的viewmodel中(基于传递给read函数的参数)我想根据某些条件返回true/false.
var myViewModel=function(){
this.myprop=ko.computed({read: function(){
//would like to receive an argument here to do my logic and return based on argument.
}
});
};
<input type="checkbox" data-bind="checked: myprop(someval1)" />
<input type="checkbox" data-bind="checked: myprop(someval2)" />
<input type="checkbox" data-bind="checked: myprop(someval3)" />
Run Code Online (Sandbox Code Playgroud)
有什么建议?
期望的行为是将参数(文本)传递给onClick处理程序到console.log它,但似乎我在做错了语法.
如果我把论点排除在下面,它的工作正常:
export default class Nav extends Component {
componentDidMount() {
this.props.pickNumber(3);
}
onPress() {
console.log('FOOOBAAR');
}
render() {
return (
<View>
<Text>####################</Text>
<Text>Intro Screen</Text>
<Text>Number: {this.props.numbers}</Text>
<TouchableHighlight onPress={this.onPress.bind(this)}>
<Text>Go to Foo</Text>
</TouchableHighlight>
</View>
);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我想将参数传递给onPress处理程序,它会抱怨'无法读取未定义的属性'bind'.
export default class Nav extends Component {
componentDidMount() {
this.props.pickNumber(3);
}
onPress(txt) {
console.log(txt);
}
render() {
return (
<View>
<Text>####################</Text>
<Text>Intro Screen</Text>
<Text>Number: {this.props.numbers}</Text>
<TouchableHighlight onPress={this.onPress('foo').bind(this)}>
<Text>Go to Foo</Text>
</TouchableHighlight>
</View>
);
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
增加:如果我将其更改为:
onPress={this.onPress.bind('foo')}
Run Code Online (Sandbox Code Playgroud)
它也不起作用.
我ListBox在我的wpf窗口中绑定了一个ObervableCollection.如果有人点击了某个元素ListBox(就像链接一样),我想打开浏览器.谁能告诉我怎么做?我发现了listboxviews的一些东西,它只是以这种方式工作还是有一种方法只是使用ListBox?
你的
塞巴斯蒂安
我正在寻找建立一个与git密切联系的应用程序.
是否有可用的语言绑定,如果有,哪些是最全面的?
这是否意味着去Bare Metal C?
或者perl/python/php/C#有一组完整的绑定吗?
谢谢
丹尼尔
是否有更短/更清晰的方法来进行null/undefined测试?
<select data-bind="options: SelectedBusinessLine() ? SelectedBusinessLine().Clusters() : [],
optionsText: 'Title',
value: SelectedCluster,
optionsCaption: 'Select Cluster..'">
</select>
Run Code Online (Sandbox Code Playgroud)
代替
data-bind="options: SelectedBusinessLine() ? SelectedBusinessLine().Clusters() : [],
Run Code Online (Sandbox Code Playgroud)
我想要
data-bind="options: SelectedBusinessLine().Clusters(),
Run Code Online (Sandbox Code Playgroud)
给(或)拿()
或者至少一个更简单的空操作符检查'??' SelectedBusinessLine ?? []
或者是一个自动检查null或silent失败的绑定参数.
任何想法,如果这是可能的?
binding ×10
c# ×4
wpf ×3
knockout.js ×2
.net ×1
c ×1
combobox ×1
converter ×1
git ×1
isenabled ×1
javascript ×1
listbox ×1
listboxitem ×1
observable ×1
react-native ×1
vb.net ×1
winforms ×1
xaml ×1