我正在WPF應用程序中動態生成標籤,按鈕和文本框。那麼我是成功地動態創建它們的,但是我面臨着一個主要問題。無法綁定動態生成的WPF按鈕和文本框
的Xaml:
<ListBox x:Name="myViewChannelList" HorizontalAlignment="Stretch" Height="Auto" ItemsSource="{Binding}" Margin="0" VerticalAlignment="Stretch" Width="Auto">
<ListBox.ItemTemplate>
<DataTemplate >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="170" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Content="{Binding Path=ChanelName}" Margin="50,20,0,0"></Label>
<Grid Grid.Column="1">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Text="{Binding Path=VoltageText}" Height="25" Width="50" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,0,0,0" />
<Button Grid.Column="1" Content="Set" Height="25" Command="{Binding ElementName=myViewChannelList, Path=DataContext.SetCommand}" Width="50" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,0,0,0" ></Button>
</Grid>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
模型類:
private string _ChanelName = "";
public String ChanelName
{
get
{
return _ChanelName;
}
set
{
if (value != _ChanelName)
{
_ChanelName = value;
OnPropertyChanged("ChanelName");
}
}
}
// Constructor
public VoltageModel(string ChanelName)
{
this.ChanelName = ChanelName;
}
public override string ToString()
{
return _ChanelName;
}
ViewModel類:
class ChannelList : ObservableCollection<VoltageModel>, INotifyPropertyChanged
{
private string _VoltageText;
public string VoltageText
{
get { return _VoltageText; }
set
{
_VoltageText = value;
OnPropertyChanged("VoltageText");
}
}
// Method gets called when Set Button Is Clicked
public void SetCommandExecuted()
{
string val = VoltageText;
}
//Notify Property Changed members are present
}
Xaml.cs類別:
ChannelList myChanels = new ChannelList();
public VoltageView() // Constructor
{
InitializeComponent();
myChanels.Add(new VoltageModel("VDD__Main"));
myChanels.Add(new VoltageModel("VDD__IO__AUD"));
myChanels.Add(new VoltageModel("VDD__CODEC__AUD"));
myViewChannelList.DataContext = myChanels;
}
這使我3個標籤(如上述內容),3個文本框和3個按鈕當我運行該應用程序。
現在,當我在文本框中輸入值時,在SetCommandExecuted()中放置斷點時,它會在按鈕單擊時顯示null。最重要的是,我點擊的4個按鈕中的任何一個都會生成事件。我希望第一個文本框和第一個按鈕同步(綁定),第二個textbx和第二個按鈕同步,等等。基本上每個控件必須與另一個控件連續同步。它不應該影響其他行。可能嗎???
令人敬畏的兄弟。這工作順利。但我在這裏幾乎沒有問題。由於您已經對「電壓文本」進行了硬編碼,因此當我嘗試在文本框中輸入某個值並單擊該按鈕時,它仍具有「電壓文本1」值。我希望用戶在文本框中輸入值而不是硬編碼:) – StonedJesus
它只是用「電壓文本1」進行初始化。您可以更改用戶界面上的文本並點擊設置按鈕,它將使用按鈕單擊上的新文本值。只需在每個新的VoltageModel對象上移除VoltageText =「電壓文本」即可。這樣文本框將是空的。 –
檢查我更新的答案。當我這樣做並在文本框中輸入「32」時,我在'SetCommandExecute'處放置了一個斷點,它將對象'voltageText'顯示爲「」並且不帶「32」。我在哪裏犯錯誤? – StonedJesus