我在我的父ViewModel中有一個ObservableCollection,我想要在父視圖中顯示。所以我定義了一個子視圖和一個子ViewModel處理按鈕的點擊。 如何從ObservableCollection中將每個項目放入相應的子ViewModel中,而不會丟失用於按鈕單擊處理的已設置的RelayCommands?WPF MVVM DataTemplate:從父視圖模型注入模板ViewModel
代碼隱藏我做的DataContext的是設置中選取適當的視圖模型的唯一的事我父視圖:
DataContext = new ParentViewModel();
在我父視圖XAML我定義了一個列表框,以顯示我的孩子查看一個DataTemplate:
<ListBox
ItemsSource="{Binding Path=Items}">
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type vm:ChildViewModel}">
<views:ChildView Width="auto" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
現在在我的ChildView我有幾個的TextBlocks顯示數據綁定和按鈕應該在的ObservableCollection中指定的路徑執行文件:
<TextBlock
Text="{Binding Path=Title}" />
...
<Button
Content="Start exe"
Tag="{Binding Path=ExePath}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<i:InvokeCommandAction Command="{Binding Path=OnButtonClicked}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
的兒童視圖模型持有RelayCommands處理按鈕單擊事件:現在
private RelayCommand onButtonClicked;
public ICommand OnButtonClicked
{
get
{
return onButtonClicked ??
(onButtonClicked =
new RelayCommand(ObeyOnButtonClicked, CanObeyOnButtonClicked));
}
}
private void ObeyOnButtonClicked()
{
... //Path conversion
Process.Start(pathToExe);
}
private bool CanObeyOnButtonClicked()
{
return true;
}
,我的孩子中查看的代碼隱藏,當我添加
DataContext = new SampleItemViewModel();
的構造,按鈕點擊處理,但文本框全部爲空。 當我刪除這一行時,文本框被正確填充,但不處理按鈕點擊。
如何讓這兩個功能都能正常工作?
編輯:
ParentViewModel:
private ObservableCollection<Item> items;
public ObservableCollection<Item> Items
{
get { return items; }
set
{
items= value;
OnPropertyChanged("Items");
}
}
... //Filling the Collection in Constructor
ChildViewModel只包含上面提到的按鈕單擊處理。
編輯:
我試過幾件事情,但現在我不知道如何從ChildView命令綁定到我的ChildViewModel沒有設定我ChildView的DataContext的我ChildViewModel
但我怎麼處理的ChildViewModel與數據從收集項目按鈕點擊事件? – user2198982 2013-03-22 12:02:05
請分享您的viewmodels的相關代碼 – mathieu 2013-03-22 12:04:05
刪除您的DataContext = new SampleItemViewModel();從你的子視圖代碼後面,並按照mathieu指令 – blindmeis 2013-03-22 13:36:57