我在WPF中有一个列表框,位于布局根目录中。
我也有一个在布局根目录中的框架。
列表框由具有字符串(Name)和框架元素(UI)的项组成。
如何将框架的内容绑定为列表框所选项目属性的UI属性?
如果您需要代码隐藏,您将如何在MVVM中执行此操作
答案 0 :(得分:0)
听起来像是要显示所选对象的对象列表和详细信息。如果我是对的,MVVM中的解决方案可能会遵循:
<ListView ItemsSource="{Binding ObjectsList}" IsSynchronizedWithCurrentItem="True" />
<ContentControl Content="{Binding ObjectsList}">
<ContentControl.ContentTemplate>
<DataTemplate>
<!-- details template -->
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
答案 1 :(得分:0)
我使用了ContentControl而不是Frame,因为我遇到了与Content属性绑定的问题,我从未在绑定更改后刷新它。我没有做适当的MVVM,数据不应该托管在视图中。
XAML:
<Window.Resources>
<CollectionViewSource x:Key="CVS" Source="{Binding}" />
</Window.Resources>
<StackPanel DataContext="{Binding Source={StaticResource CVS}}">
<ListBox
ItemsSource="{Binding}"
IsSynchronizedWithCurrentItem="True"
DisplayMemberPath="Name">
</ListBox>
<ContentControl Content="{Binding Path=UI}" />
</StackPanel>
代码背后:
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
namespace BindDemo
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
Data = new List<DataItem>();
Data.Add(new DataItem("TextBox", new TextBox(){ Text="hello" }));
Data.Add(new DataItem("ComboBox", new ComboBox()));
Data.Add(new DataItem("Slider", new Slider()));
DataContext = Data;
}
public List<DataItem> Data
{
get; private set;
}
}
public class DataItem
{
public DataItem(string name, FrameworkElement ui)
{
Name = name;
UI = ui;
}
public string Name { get; private set; }
public FrameworkElement UI { get; private set; }
}
}