【发布时间】:2018-09-20 04:48:42
【问题描述】:
我正在使用带有 MVVM 设计模式的 WPF,我需要绑定一个属于 ItemsSource 绑定父级的命令: 查看:
<Window x:Class="TaskSupervisor.MainWindow"
...
...>
<Window.DataContext>
<local:TacheGroupeViewModel/>
</Window.DataContext>
<Grid>
<TreeView x:Name="TachesTree" ItemsSource="{Binding TachesGroupes.GroupesConfig}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Value.Tasks}">
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<Grid>
<CheckBox x:Name="InProgress"
IsChecked="{Binding ModifInProgress}">
</CheckBox>
<StackPanel Grid.Row="2" Grid.Column="2" Orientation="Horizontal">
...
</StackPanel>
<StackPanel Grid.Row="3" Grid.Column="2" Orientation="Horizontal">
...
</StackPanel>
</Grid>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
<TextBlock Text="{Binding Value.DisplayGroupe, Mode=OneWay}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
</Window>
视图模型:
class TacheGroupeViewModel : INotifyPropertyChanged {
public Model.TachesGroupes TachesGroupes { get; set; }
public TacheGroupeViewModel() {
this.TachesGroupes = new Model.TachesGroupes();
// return a Dictionary<string, CustomClass> Object
// CustomClass => Contain some field and a List Of custom class
}
private ICommand _cmdEnCoursDeTraitement;
public ICommand CmdEnCoursDeTraitement {
get {
return _cmdEnCoursDeTraitement ?? ( _cmdEnCoursDeTraitement = new RelayCommand(x => {Test(); }) );
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName) {
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public void Test() {
var test = "xD";
}
}
我想在我的 Checkbox 对象上进行绑定:当 HierarchicalDataTemplate 的 Items 源设置为“Tasks”时,我该怎么做?我只能在我的“Tasks”字段上绑定。 如何获取ItemSource的父级?
【问题讨论】:
-
您将使用相对源绑定。我不清楚 modifinprogress 会在哪里。如果它在上一级的 treeviewitem 中,则绑定 DataContext.YouProperty、relativesource 祖先类型 treeviewitem 和祖先级别 2。如果它在窗口视图模型中,则 relativesource 将是 treeview (可能与 window 具有相同的数据上下文)。
-
另一种选择是在
TacheGroupeViewModel上添加对父项的引用并浏览该项以进行绑定。 -
也许我做错了,这是我的第一个真正的 MVVM 应用程序,也许我这样做的方式存在更深层次的问题
-
命令在哪里?我看不出是否在 XAML 中。
-
这里没有导致绑定错误。但是如果我要在复选框上绑定一个命令,我怎样才能得到我的 ViewModel Icommand ?