我所做的我有Class1
我有主窗口
和代码隐藏:
我创建了class1对象,并将其传递给UserControleSub构造函数,这是他的ViewModel的第二个窗口
然后我将其传递给第二个窗口ViewModel构造函数
第二个窗口ViewModel看起来像这样:
及其XAML文件:
策略是通过窗口构造函数将其传递给ViewModel构造函数,
这是一个好主意吗?它使ViewModel依赖于窗口,而第二个Window依赖于第一个窗口,这是一种不好的方式,对吗?
有更好的方法吗?
Class1:
public class Class1
{
public Class1(string x)
{
X = x;
}
public string X { get; set; }
}
我有主窗口
main window:
<Window x:Class="WpfApp2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp2"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<StackPanel>
<TextBox Text="{Binding C1.X, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></TextBox>
<ListBox Margin="5" Name="EventList"
ItemsSource="{Binding SensorEventList,UpdateSourceTrigger=PropertyChanged,IsAsync=True}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<ContentControl Content="{Binding}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Grid>
</Window>
和代码隐藏:
主窗口代码后面:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new MainWindowViewModel();
}
}
我创建了class1对象,并将其传递给UserControleSub构造函数,这是他的ViewModel的第二个窗口
Main View Model:
public class MainWindowViewModel
{
public Class1 C1 { get; set; } = new Class1("123");
public MainWindowViewModel()
{
SensorEventList.Add(new UserControleSub(C1));
}
public ObservableCollection <UserControleSub> SensorEventList { get; set; } = new ObservableCollection<UserControleSub>();
}
然后我将其传递给第二个窗口ViewModel构造函数
第二个窗口ViewModel构造函数:
public partial class UserControleSub : UserControl
{
public UserControleSub(Class1 c1)
{
InitializeComponent();
DataContext = new UserControleSubViewModel(c1);
}
}
第二个窗口ViewModel看起来像这样:
第二个窗口ViewModel:
public class UserControleSubViewModel
{
public UserControleSubViewModel(Class1 c1)
{
C1 = c1;
}
public Class1 C1 { get; set; }
}
及其XAML文件:
second window XAML:
<UserControl x:Class="WpfApp2.UserControleSub"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp2"
mc:Ignorable="d" Height="450" Width="800">
<Grid>
<TextBlock Text="{Binding C1.X,UpdateSourceTrigger=PropertyChanged}" FontSize="30"></TextBlock>
</Grid>
</UserControl>
策略是通过窗口构造函数将其传递给ViewModel构造函数,
这是一个好主意吗?它使ViewModel依赖于窗口,而第二个Window依赖于第一个窗口,这是一种不好的方式,对吗?
有更好的方法吗?