我非常在学习过程中的WPF/MVVM,我已经扫描了其他职位,但还没有遇到有人做什么,我试图完成。
我有一个名为Comp_Item.xaml
的User Control
(视图),其中的网格/数据网格各有不同的名称:
<Grid ShowGridLines="False">
<!-- Sectioning Columns and Rows -->
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="160"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<!-- Data Connection Section -->
<Grid Grid.Column="0" Grid.Row="0">
<TextBlock Style="{StaticResource SectionTitleText_Style}" Margin="5,5,0,0" Text="Connections" />
<DataGrid Name="connDataGrid" AutoGenerateColumns="False" Margin="3,30,3,3" VerticalScrollBarVisibility="Auto" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Item" Width="*" />
<DataGridTextColumn Header="Output" Width="*" />
<DataGridTextColumn Header="Status" Width="*" />
</DataGrid.Columns>
</DataGrid>
</Grid>
<!-- Discrete Outputs Section -->
<Grid Grid.Column="0" Grid.Row="1">
<TextBlock Style="{StaticResource SectionTitleText_Style}" Margin="5,5,0,0" Text="Outputs" />
<DataGrid Name="outDataGrid" AutoGenerateColumns="False" Margin="3,30,3,3" VerticalScrollBarVisibility="Auto" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Item" Width="*" />
<DataGridTextColumn Header="Output" Width="*" />
<DataGridTextColumn Header="Status" Width="*" />
</DataGrid.Columns>
</DataGrid>
</Grid>
<!-- Discrete Inputs Section -->
<Grid Grid.Column="1" Grid.RowSpan="2">
<TextBlock Style="{StaticResource SectionTitleText_Style}" Margin="5,5,0,0" Text="Inputs" />
<DataGrid Name="inDataGrid" AutoGenerateColumns="False" Margin="3,30,3,3" VerticalScrollBarVisibility="Auto" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Item" Width="*" />
<DataGridTextColumn Header="Output" Width="*" />
<DataGridTextColumn Header="Status" Width="*" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Grid>
我有另一个User Control
(视图),名为Dashboard.xaml
-它有一个TabControl,其中包含Comp_Item.xaml
的4个选项卡
<Grid Grid.ColumnSpan="4" Grid.Row="4">
<TabControl Margin="10">
<TabItem x:Name="comp1" Header="Computer 1" Style="{StaticResource TubeTabItem_Style}">
<view:Comp_Item/>
</TabItem>
<TabItem x:Name="comp2" Header="Computer 2" Style="{StaticResource TubeTabItem_Style}">
<view:Comp_Item/>
</TabItem>
<TabItem x:Name="comp3" Header="Computer 3" Style="{StaticResource TubeTabItem_Style}">
<view:Comp_Item/>
</TabItem>
<TabItem x:Name="comp4" Header="Computer 4" Style="{StaticResource TubeTabItem_Style}">
<view:Comp_Item/>
</TabItem>
</TabControl>
</Grid>
然后,我有一个名为DashboardVM.cs
的View Model
(类),我计划在按下开始按钮时执行一些连接相关的测试,然后将结果插入到适当的数据表中。
namespace TesterApp.ViewModel
{
class DashboardVM : ViewModelBase
{
enum TestItemStatus
{
Reset,
Queued,
InProgress,
Pass,
Fail
}
private string _StartButtonText;
private bool isTestRunning;
public DashboardVM()
{
_pageModel = new PageModel();
_StartButtonText = "Start Test";
StartButtonCommand = new RelayCommand(o => StartButtonClick("StartButton"));
}
public ICommand StartButtonCommand { get; set; }
private bool TestRunning
{
get { return isTestRunning; }
set { isTestRunning = value;
if (isTestRunning) { StartButtonText = "Stop Test"; }
else { StartButtonText = "Start Test";}
NotifyPropertyChanged("TestRunning");
}
}
private void StartButtonClick(object sender)
{
if(TestRunning)
{
TestRunning = false;
}
else
{
// Start program.
TestRunning = true;
}
}
}
}
下面是一个图像视图:
我在这里的目标是,假设我用ping测试计算机1的以太网,我希望能够将结果插入到表中。理论上类似于comp1.connDataGrid.Items.Add({"Ethernet", "8 Bytes", "Pass"});
-显然我知道这行不通,但希望它能提供一个我希望能够做到的示例。是否有一种方法可以绑定数据以成功完成此操作?
1条答案
按热度按时间2nbm6dog1#
不建议使用Parent作为子节点之间的通信(至少在我们讨论MVVM时)。我建议在这些情况下使用某种messenger。例如,如果您正在使用MVVM,使用一些第三方库(如https://learn.microsoft.com/en-us/dotnet/communitytoolkit/mvvm/messenger)或自己编写messenger(您所需要的只是订阅、发布和接收消息)是个不错的主意。
另一个选项是使用全局命令或Service进行跨ViewModel通信。