私は C++ 開発者で、最近 C# に移行しました。ボタン、ラベル、テキストボックスを動的に生成する必要があるwpfアプリに取り組んでいます。それらを動的に生成することに加えて、bool available プロパティを維持することによって、利用可能なチャネルのみを表示する必要があることを確認しました。コードは次のとおりです。
XAML:
<Grid Visibility="{Binding IsAvailable, Converter={StaticResource booltovisibility}}">
<Label Grid.Column="0" Content="{Binding ChannelName}" />
<TextBox Grid.Column="1" Text="{Binding VoltageText}" PreviewTextInput="VoltageBox_PreviewTextInput" />
<Button Grid.Column="1" Content="Set" CommandParameter="{Binding}" Command="{Binding VoltageCommand}" />
<Label Grid.Column="2" Content="{Binding CurrentText}" />
<ToggleButton Grid.Column="3" Content="On" Command="{Binding VoltageToggleCommand}" IsChecked="{Binding Path=IsChecked}" />
</Grid>
<Button Content="Refresh All" Grid.Column="1" Command="{Binding Path=RefreshAllButtonCommand}" Name="RefreshAllBtn" />
ビューモデル:
public ObservableCollection<VoltageBoardChannel> channelList = null;
public ObservableCollection<VoltageBoardChannel> bavaria1Channels = new ObservableCollection<VoltageBoardChannel>
{
new VoltageBoardChannel { ChannelName = "VDD__MAIN", IsAvailable = true, ID = 1},
new VoltageBoardChannel { ChannelName = "VDD__IO", IsAvailable = true, ID = 2},
new VoltageBoardChannel { ChannelName = "VDD__CODEC", IsAvailable = true, ID = 3},
new VoltageBoardChannel { ChannelName = "VDD__LDO", IsAvailable = true, ID = 4},
new VoltageBoardChannel { ChannelName = "VDD__AMP", IsAvailable = true, ID = 5},
new VoltageBoardChannel { ChannelName = "", IsAvailable = false, ID = 6},
new VoltageBoardChannel { ChannelName = "", IsAvailable = false, ID = 7},
new VoltageBoardChannel { ChannelName = "", IsAvailable = false, ID = 8},
new VoltageBoardChannel { ChannelName = "", IsAvailable = false, ID = 9},
new VoltageBoardChannel { ChannelName = "", IsAvailable = false, ID = 10},
new VoltageBoardChannel { ChannelName = "", IsAvailable = false, ID = 11},
new VoltageBoardChannel { ChannelName = "", IsAvailable = false, ID = 12},
};
public VoltageViewModel()
{
channelList = new ObservableCollection<VoltageBoardChannel>();
channelList = bavaria1Channels;
}
public ObservableCollection<VoltageBoardChannel> VoltageChannelList
{
get
{
return channelList;
}
set
{
channelList = value;
OnPropertyChanged("ChannelList");
}
}
void RefreshAllClick()
{
//Here I want to check if channel are available or not. If yes then execute few statements.
}
モデル クラス:
private string mChannelName;
public string ChannelName
{
get
{
return mChannelName;
}
set
{
mChannelName = value;
OnPropertyChanged("ChannelName");
}
}
private bool mIsAvailable;
public bool IsAvailable
{
get
{
return mIsAvailable;
}
set
{
mIsAvailable = value;
OnPropertyChanged("IsAvailable");
}
}
double voltageText;
public double VoltageText
{
get
{
return voltageText;
}
set
{
if (value > 5.0D || value < 0.0D)
throw new InvalidOperationException();
voltageText = value;
OnPropertyChanged("VoltageText");
}
}
string currentText = "0";
public string CurrentText
{
get
{
return currentText + " V";
}
set
{
currentText = value;
OnPropertyChanged("CurrentText");
}
}
int index ;
public int ID
{
get
{
return index;
}
set
{
index = value;
OnPropertyChanged("ID");
}
}
したがって、私の中で気付いた場合、Bavaria1 Channel
利用可能なチャネルがほとんどなく(true)、ほとんどがfalseであることがわかります。したがって、起動時に利用可能なチャンネルのみが表示されます。したがって、booltovisibility クラスを使用して、グリッドに可視性を設定し、それに応じて表示することができます。
ボタンをクリックRefreshAll
すると、呼び出されたメソッドがトリガーされ、どのチャンネルが利用可能RefreshAll_Click()
かを確認したい。if
はいの場合、いくつかのステートメントを実行します。次のようにC++でこれを行いました:
if(m_voltageChannels[channel].available) // Here channel is 12 as you can notice in bavaria1 list
{
cmd = (0x8400 | (channel & 0xFF));
String OldValue = m_labelCurrentVoltage[channel]->getText();
//Some Code
}
どうすればこれを達成できますか?:)