How to close User Control from its View Model
I created my UserControl like this:
MyUserCtrl myctrl = new MyUserCtrl() { DataContext = new MyViewModel()};
ControlCollection.Add(myctrl);
and i output it using this ItemsControl ItemsSource="{Binding ControlCollection}" to the View.
It's clean and nice but the problem is I don't know how can I close those UserControls that I opened.
And what if I just remove it to the collection. Thus the View Model will close too?
c# wpf mvvm caliburn.micro dynamic-usercontrols
add a comment |
I created my UserControl like this:
MyUserCtrl myctrl = new MyUserCtrl() { DataContext = new MyViewModel()};
ControlCollection.Add(myctrl);
and i output it using this ItemsControl ItemsSource="{Binding ControlCollection}" to the View.
It's clean and nice but the problem is I don't know how can I close those UserControls that I opened.
And what if I just remove it to the collection. Thus the View Model will close too?
c# wpf mvvm caliburn.micro dynamic-usercontrols
3
"It's clean and nice" - not really.
– Clemens
Nov 12 at 18:43
Done. Thanks for the tip.
– Francis Canoza
Nov 12 at 18:53
add a comment |
I created my UserControl like this:
MyUserCtrl myctrl = new MyUserCtrl() { DataContext = new MyViewModel()};
ControlCollection.Add(myctrl);
and i output it using this ItemsControl ItemsSource="{Binding ControlCollection}" to the View.
It's clean and nice but the problem is I don't know how can I close those UserControls that I opened.
And what if I just remove it to the collection. Thus the View Model will close too?
c# wpf mvvm caliburn.micro dynamic-usercontrols
I created my UserControl like this:
MyUserCtrl myctrl = new MyUserCtrl() { DataContext = new MyViewModel()};
ControlCollection.Add(myctrl);
and i output it using this ItemsControl ItemsSource="{Binding ControlCollection}" to the View.
It's clean and nice but the problem is I don't know how can I close those UserControls that I opened.
And what if I just remove it to the collection. Thus the View Model will close too?
c# wpf mvvm caliburn.micro dynamic-usercontrols
c# wpf mvvm caliburn.micro dynamic-usercontrols
asked Nov 12 at 18:41
Francis Canoza
176
176
3
"It's clean and nice" - not really.
– Clemens
Nov 12 at 18:43
Done. Thanks for the tip.
– Francis Canoza
Nov 12 at 18:53
add a comment |
3
"It's clean and nice" - not really.
– Clemens
Nov 12 at 18:43
Done. Thanks for the tip.
– Francis Canoza
Nov 12 at 18:53
3
3
"It's clean and nice" - not really.
– Clemens
Nov 12 at 18:43
"It's clean and nice" - not really.
– Clemens
Nov 12 at 18:43
Done. Thanks for the tip.
– Francis Canoza
Nov 12 at 18:53
Done. Thanks for the tip.
– Francis Canoza
Nov 12 at 18:53
add a comment |
1 Answer
1
active
oldest
votes
Do not assign a collection of UI elements to the ItemsSource of an ItemsControl. Instead, put the UI element in the ItemsControl's ItemTemplate and pass a collection of view model instances to the ItemsSource.
<ItemsControl ItemsSource="{Binding MyItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:MyUserCtrl />
</DataTemplate>
</ItemsCControl.ItemTemplate>
</ItemsCControl>
Add a view model item to the collection property in your "main" view model:
var item = new MyViewModel();
MyItems.Add(item);
To "close" a control, remove the appropriate item from the collection:
MyItems.Remove(item);
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53268225%2fhow-to-close-user-control-from-its-view-model%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Do not assign a collection of UI elements to the ItemsSource of an ItemsControl. Instead, put the UI element in the ItemsControl's ItemTemplate and pass a collection of view model instances to the ItemsSource.
<ItemsControl ItemsSource="{Binding MyItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:MyUserCtrl />
</DataTemplate>
</ItemsCControl.ItemTemplate>
</ItemsCControl>
Add a view model item to the collection property in your "main" view model:
var item = new MyViewModel();
MyItems.Add(item);
To "close" a control, remove the appropriate item from the collection:
MyItems.Remove(item);
add a comment |
Do not assign a collection of UI elements to the ItemsSource of an ItemsControl. Instead, put the UI element in the ItemsControl's ItemTemplate and pass a collection of view model instances to the ItemsSource.
<ItemsControl ItemsSource="{Binding MyItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:MyUserCtrl />
</DataTemplate>
</ItemsCControl.ItemTemplate>
</ItemsCControl>
Add a view model item to the collection property in your "main" view model:
var item = new MyViewModel();
MyItems.Add(item);
To "close" a control, remove the appropriate item from the collection:
MyItems.Remove(item);
add a comment |
Do not assign a collection of UI elements to the ItemsSource of an ItemsControl. Instead, put the UI element in the ItemsControl's ItemTemplate and pass a collection of view model instances to the ItemsSource.
<ItemsControl ItemsSource="{Binding MyItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:MyUserCtrl />
</DataTemplate>
</ItemsCControl.ItemTemplate>
</ItemsCControl>
Add a view model item to the collection property in your "main" view model:
var item = new MyViewModel();
MyItems.Add(item);
To "close" a control, remove the appropriate item from the collection:
MyItems.Remove(item);
Do not assign a collection of UI elements to the ItemsSource of an ItemsControl. Instead, put the UI element in the ItemsControl's ItemTemplate and pass a collection of view model instances to the ItemsSource.
<ItemsControl ItemsSource="{Binding MyItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:MyUserCtrl />
</DataTemplate>
</ItemsCControl.ItemTemplate>
</ItemsCControl>
Add a view model item to the collection property in your "main" view model:
var item = new MyViewModel();
MyItems.Add(item);
To "close" a control, remove the appropriate item from the collection:
MyItems.Remove(item);
answered Nov 12 at 18:48
Clemens
87.7k885169
87.7k885169
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53268225%2fhow-to-close-user-control-from-its-view-model%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
3
"It's clean and nice" - not really.
– Clemens
Nov 12 at 18:43
Done. Thanks for the tip.
– Francis Canoza
Nov 12 at 18:53