我在TextBox中有一个按钮。我想为我的按钮绑定命令。但是当我点击按钮时它不起作用。 这是App.xaml中的TextBox模板:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ScrollViewer Name="PART_ContentHost"
VerticalAlignment="Center"
Margin="10,0" Grid.Column="0"/>
<Button Command="{Binding CmdRandom, RelativeSource={x:Static RelativeSource.Self}}"
Height="15"
Width="15"
Grid.Column="1" />
</Grid>
视图模型:
string getrnd;
public string GetRnd {
set {
getrnd = value;
OnPropertyChanged("GetRnd");
}
get {
return getrnd;
}
}
public ICommand CmdRandom {
set {
cmdrnd = value;
}
get {
cmdrnd = cmdrnd ?? new RelayCommand(x => BindRandom(), x => true);
return cmrnd;
}
}
void BindRandom()
{
GetRnd = new RandomChar();
}
My TextBox:
<TextBox x:Name="txtName" Style="{StaticResource txtRnd}" MaxLength="63" Text="{Binding GetRnd, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" />
答案 0 :(得分:1)
如果你想在祖先上获得一个房产:
{Binding DataContext.CmdRandom, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TextBox}}}
更多信息:
Binding RelativeSource={
RelativeSource Mode=FindAncestor, AncestorType={x:Type ItemType}}
RelativeSource
的默认属性是Mode
属性。这里给出了一整套有效值(from MSDN):
PreviousData 允许您在显示的数据项列表中绑定上一个数据项(而不是包含数据项的控件)。
TemplatedParent 指应用模板(其中存在数据绑定元素)的元素。这与设置TemplateBindingExtension类似,仅在Binding位于模板中时才适用。
Self 指您设置绑定的元素,并允许您将该元素的一个属性绑定到同一元素上的另一个属性。
FindAncestor 指数据绑定元素的父链中的祖先。您可以使用它来绑定到特定类型或其子类的祖先。如果要指定AncestorType和/或AncestorLevel,则使用此模式。