【发布时间】:2012-10-08 06:56:12
【问题描述】:
好的,我已尽力而为,但看起来我需要帮助。我的 xaml 文件中有一个文本框、一个列表视图和一个按钮。 Listview 有两列:Devicename 和 DeviceAddress。我已经完成了列表视图和文本框的绑定,每当我在列表视图(I2CDeviceList)中选择一个项目时,设备地址(第二列)都会显示在我的文本框中。
XAML:
<TextBox PreviewTextInput="AddressBox_PreviewTextInput" Name="AddressI2C" Text="{Binding SelectedItem.I2CDeviceAddress, Path=AddressMessage, Mode=TwoWay, ElementName=I2cDeviceList}" />
<Button Content="I2C Read" Command="{Binding Path=I2CReadCommand}" Name="button9" />
<ListView Grid.Column="0" ItemsSource="{Binding I2CDeviceList}" SelectedItem="{Binding SelectedI2CDeviceList, Mode=TwoWay}" Height="100" HorizontalAlignment="Stretch" Name="I2cDeviceList" VerticalAlignment="Stretch" Width="Auto" >
<ListView.View>
<GridView>
<GridViewColumn Header="I2C Device" Width="Auto" DisplayMemberBinding="{Binding I2CDevName}" />
<GridViewColumn Header="I2C Device Address" Width="Auto" DisplayMemberBinding="{Binding I2CDeviceAddress}" />
</GridView>
</ListView.View>
</ListView>
因此使用 SelectedItem.I2CDeviceAddress 在我的文本框中为我提供了设备地址。
现在我的视图模型具有按钮和文本框的属性,并具有以下方法,当单击按钮时会调用该方法:
public void I2CReadCommandExecuted()
{
ReadMessage = string.Empty;
Byte[] buffer = new Byte[512];
int address;
string strValue = AddressMessage;
if (strValue.StartsWith("0x"))
{
strValue = strValue.Remove(0, 2);
address = Convert.ToInt32(strValue);
mComm.setAddress(address);
}
}
// This is for textBox
private string _AddressMessage = string.Empty;
public string AddressMessage
{
get
{
return _AddressMessage;
}
set
{
_AddressMessage = value;
NotifyPropertyChanged("AddressMessage");
}
}
// Property for ListView
public ObservableCollection<I2CModel> I2CDeviceList
{
get { return _I2CDeviceList; }
set
{
_I2CDeviceList = value;
NotifyPropertyChanged("I2CDeviceList");
}
}
// Property for Selected Item in ListView
private I2CModel _selectedI2CDeviceList;
public I2CModel SelectedI2CDeviceList
{
get { return _selectedI2CDeviceList; }
set
{
_selectedI2CDeviceList = value;
NotifyPropertyChanged("SelectedI2CDevSize");
}
}
基本上我必须从值中删除 0x 并将十六进制值存储在我的整数变量中。
这里我面临两个问题:
当我同时输入 Text="{Binding SelectedItem.I2CDeviceAddress, Path=AddressMessage, Mode=TwoWay, ElementName=I2cDeviceList}" 时,列表视图中的搜索地址不会出现在我的文本框中.我删除 Path=AddressMessage, Mode=TwoWay, 的那一刻,它工作正常。如何确保两者都能顺利工作?他们还有其他方法可以从列表视图中获取所选项目并将其显示在我的文本框中吗?
通过使用字符串 strValue = AddressMessage; 我试图将 AddressMessage 的内容保存在字符串中,但是当我调试我的代码时,它总是显示“null”,即使我有“ 0x23"(硬编码)在我的文本框中。因此,我收到以下错误:Object reference not set to an instance of an object. 在 if 条件的开头。
我尽力了,但没有发生。我错过了什么吗?
【问题讨论】: