在WPF MVVM中按标签查找标签

Dwa*_*ley 0 c# wpf mvvm

我试图通过其标签定位标签,以便在满足特定条件时可以在旁边添加其他标签。

在老式的winform中,我只会使用:

Label sublabel = Controls.Find(Sub.id, true).FirstOrDefault() as Label;
Run Code Online (Sandbox Code Playgroud)

view.xaml的代码段:

<Grid>
    <Label 
        Content = "{Binding Path = NodeName, Mode = OneWay}" 
        Background = "{Binding Path = NodeStatus, Mode = OneWay}"
        Tag="{Binding Path = Nodeid, Mode = OneWay}"
Run Code Online (Sandbox Code Playgroud)

我已经尝试过以下方法:

var label = Grid.Children.OfType<Label>()
    .First(i => i.Tag == "tagid");
Run Code Online (Sandbox Code Playgroud)

但产生

An object reference is required for the non-static field, method, or property 'Panel.Children'
Run Code Online (Sandbox Code Playgroud)

谢谢看

mm8*_*mm8 5

你可以给Grid一个x:Name在XAML标记:

<Grid x:Name="theGrid">
Run Code Online (Sandbox Code Playgroud)

...并在您的代码中使用此名称进行引用:

var label = theGrid.Children.OfType<Label>() ...
Run Code Online (Sandbox Code Playgroud)

请注意,无论如何,这不是MVVM。使用MVVM,您将访问Nodeidsource属性而不是元素的Tag属性Label